簡體   English   中英

如何在 C++ 中為 MVSC 編譯器禁用 RTTI?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM