为什么 typeid 打印为真?

Why does typeid print true?

我有两个 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 打印为真?

来自 CppReference.

In all cases, cv-qualifiers are ignored by typeid (that is, typeid(T) == typeid(const T))

这意味着我可以得到这份工作:

#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));