为什么 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));
我有两个 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));