typeid指针和引用比较区别?

时间:2018-06-06 02:49:02

标签: c++ casting typeid

虽然我正在弄乱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在指针和引用方面给出不同的结果?

1 个答案:

答案 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