代码之家  ›  专栏  ›  技术社区  ›  msc

为什么typeid打印为true?[副本]

  •  -1
  • msc  · 技术社区  · 7 年前

    我有两个测试用例 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 回复  |  直到 7 年前
        1
  •  2
  •   iBug    7 年前

    从…起 CppReference .

    在所有情况下,cv限定符都被typeid忽略(即, 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));