虽然我正在弄乱typeid
,但我发现了一些奇怪的行为。
#include <iostream>
#include <string>
#include <typeinfo>
int main()
{
std::cout << "Pointer comparison: " << (typeid(const int*) == typeid(int*))
<< "\nReference comparison: " << (typeid(const int&) == typeid(int&)) << '\n';
}
输出:
指针比较:0
参考比较:1
在第一种情况下,typeid
正确地表明指向常量值的指针与指向非常量值的指针不同。但是,typeid
似乎表明对常量值的引用与对非常量值的引用相同。
为什么typeid
在指针和引用方面给出不同的结果?
答案 0 :(得分:1)
此行为由C ++ 17 [expr.typeid] / 4:
定义将
typeid
应用于 type-id 时,结果会引用表示 type-id 类型的std::type_info
对象。如果 type-id 的类型是对可能的cv限定类型的引用,则typeid
表达式的结果引用表示的std::type_info
对象cv-unqualified 引用类型。
这说typeid(const T&)
和typeid(T&)
与typeid(T)
的结果相同。
此外,第5点还涵盖typeid(T)
与typeid(const T)
相同。对于引用类型和const / volatile限定类型,没有单独的typeinfo
类型。 See cppreference summary