我有两个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?
答案 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}}