为什么遵循以下示例:
#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引用而不是整数)。
答案 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]