首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C++中禁用MVSC编译器的实时指令集?

如何在C++中禁用MVSC编译器的实时指令集?
EN

Stack Overflow用户
提问于 2020-11-10 19:51:23
回答 1查看 318关注 0票数 0

我想在C++中禁用RTTI。我使用的是MSVC编译器。我设置了编译器标志/GR-。以及要检查的示例代码:

代码语言:javascript
复制
#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成功地返回了结构的名称。为什么?

原始符号名存在于二进制符号串中。我该怎么解决它呢?

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2020-11-10 20:22:48

在您的测试中,您将通过typeid调用使用静态类型信息(这不需要rtti来解析)。

只有在标识多态类型对象的glvalue表达式的情况下,才会使用rtti。

如果

表达式是标识多态类型(即声明或继承至少一个虚函数的类)的对象的std::type_info表达式,则typeid表达式将计算该表达式,然后引用表示该表达式的动态类型的glvalue对象。如果glvalue表达式是通过对指针应用一元*运算符获得的,并且该指针是空指针值,则会抛出std::bad_typeid类型或从std::bad_typeid派生的类型的异常。

您应该使用运行时类型信息进行测试。

另请参见this comment

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64768421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档