如何在Visual Studio 2008中关闭RTTI

Sam*_*rsa 3 c++ rtti visual-studio-2008

我不确定其他版本,但是,在VS 2008中,即使禁用了RTTI,我也可以通过调用typeid(T).name()类型来查询信息.它适用于所有类型,内部和用户创建.

我们的项目已禁用RTTI,但我惊讶地发现这仍然有效.这是一个Visual Studio错误还是/GR-不足以禁用它的标志?这是否落入了这个领域undefined behavior?如果它不是一个bug,我该怎么把它关掉?

Mar*_*som 6

是否有可能typeid在编译时已知类型的表达式上使用?如果是这样,你将完全绕过RTTI的"运行时"方面.从Microsoft文档typeid:

如果表达式既不是指针也不是对象的基类的引用,则结果是表示表达式的静态类型的type_info引用.表达式的静态类型是指在编译时已知的表达式的类型.在计算表达式的静态类型时,将忽略执行语义.