คำถามติดแท็ก rtti

11
RTTI แพงแค่ไหน?
ฉันเข้าใจว่ามีทรัพยากรที่ได้รับผลกระทบจากการใช้ RTTI แต่มันมีขนาดใหญ่เพียงใด ทุกที่ที่ฉันดูก็บอกว่า "RTTI มีราคาแพง" แต่ไม่มีพวกเขาจริง ๆ ที่ให้มาตรฐานหรือข้อมูลเชิงปริมาณเกี่ยวกับหน่วยความจำเวลาประมวลผลหรือความเร็ว ดังนั้น RTTI แพงแค่ไหน? ฉันอาจใช้กับระบบสมองกลฝังตัวที่ฉันมี RAM เพียง 4MB ดังนั้นทุกบิตจึงนับ แก้ไข: ตามคำตอบของ S. Lottมันจะดีกว่าถ้าฉันรวมสิ่งที่ฉันกำลังทำอยู่ ฉันใช้คลาสเพื่อส่งผ่านข้อมูลที่มีความยาวต่างกันและสามารถดำเนินการต่างๆ ได้ดังนั้นจึงเป็นการยากที่จะทำได้โดยใช้ฟังก์ชันเสมือนเท่านั้น ดูเหมือนว่าใช้ไม่กี่dynamic_castสามารถแก้ไขปัญหานี้ได้โดยอนุญาตให้คลาสที่ได้รับแตกต่างกันถูกส่งผ่านระดับที่แตกต่างกัน จากความเข้าใจของฉันdynamic_castใช้ RTTI ดังนั้นฉันสงสัยว่ามันจะเป็นไปได้อย่างไรที่จะใช้ในระบบที่ จำกัด
152 c++  performance  rtti 

4
เทียบกับ typeof
รหัสชิ้นใดเร็วกว่ากัน if (obj is ClassA) {} if (obj.GetType() == typeof(ClassA)) {} แก้ไข: ฉันทราบว่าพวกเขาไม่ได้ทำสิ่งเดียวกัน
150 c#  rtti 

7
เหตุใดจึงนิยมใช้ 'ความแตกต่างแบบบริสุทธิ์' มากกว่าการใช้ RTTI
ทรัพยากร C ++ เกือบทั้งหมดที่ฉันเคยเห็นที่พูดถึงเรื่องประเภทนี้บอกฉันว่าฉันควรใช้วิธีการหลายรูปแบบในการใช้ RTTI (การระบุประเภทรันไทม์) โดยทั่วไปแล้วฉันให้คำแนะนำแบบนี้อย่างจริงจังและจะพยายามทำความเข้าใจกับเหตุผล - ท้ายที่สุด C ++ เป็นสัตว์ร้ายที่ยิ่งใหญ่และยากที่จะเข้าใจในเชิงลึกทั้งหมด อย่างไรก็ตามสำหรับคำถามเฉพาะนี้ฉันกำลังวาดภาพว่างและต้องการดูว่าอินเทอร์เน็ตสามารถให้คำแนะนำประเภทใดได้บ้าง ก่อนอื่นให้ฉันสรุปสิ่งที่ฉันได้เรียนรู้จนถึงตอนนี้โดยระบุสาเหตุทั่วไปที่อ้างว่าทำไม RTTI จึง "ถือว่าเป็นอันตราย": คอมไพเลอร์บางตัวไม่ใช้มัน / RTTI ไม่ได้เปิดใช้งานเสมอไป ฉันไม่ซื้อข้อโต้แย้งนี้จริงๆ เหมือนกับการบอกว่าฉันไม่ควรใช้ฟีเจอร์ C ++ 14 เพราะมีคอมไพเลอร์ที่ไม่รองรับ แต่ก็ไม่มีใครกีดกันฉันจากการใช้คุณสมบัติ C ++ 14 โครงการส่วนใหญ่จะมีอิทธิพลเหนือคอมไพเลอร์ที่ใช้และวิธีกำหนดค่า แม้แต่การอ้างถึง manpage gcc: -fno-rtti ปิดใช้งานการสร้างข้อมูลเกี่ยวกับทุกคลาสด้วยฟังก์ชันเสมือนสำหรับใช้โดยคุณลักษณะการระบุชนิดรันไทม์ C ++ (dynamic_cast และ typeid) หากคุณไม่ได้ใช้ส่วนเหล่านั้นของภาษาคุณสามารถประหยัดพื้นที่ได้โดยใช้แฟล็กนี้ โปรดทราบว่าการจัดการข้อยกเว้นจะใช้ข้อมูลเดียวกัน แต่ G ++ สร้างขึ้นตามความจำเป็น ยังคงใช้ตัวดำเนินการ dynamic_cast …
106 c++  polymorphism  rtti 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.