typeid / type_info奇怪的行为

时间:2016-12-11 14:31:18

标签: c++ typeid

为什么遵循以下示例:

#include <iostream>
#include <typeinfo>

template<typename T>
void fun(const T& param)
{
        std::cout << "T = " << typeid(T).name() << std::endl;
        std::cout << "param = " << typeid(param).name() << std::endl;
        std::cout << (typeid(T)==typeid(param)) << std::endl;
}

int main(int, char**)
{
        fun(1);
}

给出以下输出:

T is i
param is i
1

我知道type_info::name()行为取决于实现。无论如何,我希望operator==返回false(因为param是一个const引用而不是整数)。

1 个答案:

答案 0 :(得分:16)

这是在标准中定义的:

  

5.2.8 / 5:如果表达式或type-id的类型是cv限定类型,则typeid表达式的结果是指a   表示cv-unqualified类型的std :: type_info对象[例如:

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
     

-end example]