微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在C ++中为MVSC编译器禁用RTTI?

如何解决如何在C ++中为MVSC编译器禁用RTTI?

我想在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成功返回了结构的名称。为什么?
原始符号名称存在于二进制符号字符串中。我该怎么解决
预先感谢!

解决方法

在测试中,您正在通过FROM python:latest RUN mkdir /src WORKDIR /src COPY requirements.txt /src RUN pip install -r requirements.txt COPY . /src 调用使用静态类型信息(不需要rtti来解决)。

仅当glvalue表达式标识多态类型的对象时,才使用rtti。

如果expression是用于标识a对象的glvalue表达式 多态类型(即至少声明或继承的类 一个虚函数),typeid表达式对表达式求值 然后引用代表以下内容的std :: type_info对象 表达式的动态类型。如果获得了glvalue表达式 通过将一元*运算符应用于指针,该指针是一个 空指针值,std :: bad_typeid类型或类型的异常 从std :: bad_typeid派生。

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

另请参阅this comment

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。