此代码打印 1 是正确的行为还是 g++4.5 的怪癖?
#include <iostream>
#include <typeinfo>
using namespace std;
int main(){
struct A{};
cout<<(typeid(A)==typeid(const A)&&typeid(A)==typeid(const volatile A)&&typeid(A)==typeid(volatile A));
}
我认为 cv 限定符不同的类型被视为非常不同的类型,即使较少的 cv 限定类型可以隐式转换为更多 cv 限定类型。
typeid
根据 C++ 标准,忽略 cv 限定符(取自 ISO/IEC 14882:2003 的 §5.2.8):
左值表达式的顶级 cv 限定符或作为 typeid 操作数的 type-id 始终是
被忽略。 [例子:
class D { ... };
D d1;
const D d2;
typeid(d1) == typeid(d2); // yields true
typeid(D) == typeid(const D); // yields true
typeid(D) == typeid(d2); // yields true
typeid(D) == typeid(const D&); // yields true
—结束示例]
因此,您看到的结果是预期的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)