typeid/type_info奇怪的行为

use*_*761 7 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);
}
Run Code Online (Sandbox Code Playgroud)

给出以下输出:

T is i
param is i
1
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*phe 16

这在标准中定义如下:

5.2.8/5:如果表达式或type-id的类型是cv限定类型,则typeid表达式的结果引用表示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
Run Code Online (Sandbox Code Playgroud)

- 末端的例子]