typeid / type_info奇怪的行为

typeid / type_info strange behaviour

本文关键字:info type typeid      更新时间:2023-10-16

为什么以下示例:

#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是常量参考,而不是整数)。

这是在标准中定义的:

5.2.8/5:如果表达式或类型-ID的类型是CV符号类型,则TypeID表达式的结果是指 std :: type_info对象表示CV UNQUALIFIED类型[示例:

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

- 末尾示例]