为什么typeid打印是真的?

时间:2017-11-23 12:12:22

标签: c++ c++11 typeid

我有两个std::is_same()typeid()的测试用例。

案例1:std::is_same()

#include <iostream>
#include <type_traits>
#include <cstdint>

int main()
{
    std::cout << std::boolalpha;
    std::cout << std::is_same<int, volatile int>::value << '\n'; // false
}

输出

false

它提供了正确的输出。

案例2:typeid()

#include <iostream>
#include <cstdlib>
using namespace std;

#define CMP_TYPE(a, b)  cout<<(typeid(a) == typeid(b)) << endl;

int main()
{
    cout << std::boolalpha;
    CMP_TYPE(int, volatile int)
}

输出

true

为什么typeid打印为true?

1 个答案:

答案 0 :(得分:2)

来自CppReference

  

在所有情况下,typeid都会忽略cv限定符(即#define TYPECMP(T, U) (typeid(T) == typeid(U)) assert(TYPECMP(int, const int)); assert(TYPECMP(int, volatile int)); assert(TYPECMP(int, const volatile int)); assert(TYPECMP(const int, volatile int));

这意味着我可以完成这项工作:

{{1}}