[英]How to disable RTTI in C++ for MVSC compiler?
我想在 C++ 中禁用 RTTI。 我正在使用 MSVC 編譯器。 我設置了編譯器標志/GR-
。 以及要檢查的示例代碼:
#include <iostream>
#ifdef _CPPRTTI
#error "RTTI enabled"
#endif
struct TestStructureName_123456 {
};
int main() {
printf("%s\n", typeid(TestStructureName_123456).name());
return 0;
}
_CPPRTTI
定義是否啟用 RTTI ( info )。 沒有發生預處理器錯誤,這意味着 RTTI 被禁用。
但是 typeid 成功返回結構的名稱。 為什么?
原始符號名稱存在於二進制符號字符串中。 我該如何解決?
提前致謝!
在您的測試中,您使用帶有typeid
調用的靜態類型信息(不需要 rtti 來解析)。
只有當泛左值表達式標識多態類型的對象時,才會使用 rtti。
如果 expression 是標識多態類型對象(即聲明或繼承至少一個虛函數的類)的泛左值表達式,則 typeid 表達式計算該表達式,然后引用表示該對象的 std::type_info 對象表達式的動態類型。 如果泛左值表達式是通過將一元 * 運算符應用於指針而獲得的,並且該指針是空指針值,則拋出 std::bad_typeid 類型或從 std::bad_typeid 派生的類型的異常。
您應該使用運行時類型信息進行測試。
另請參閱此評論。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.