在C++中,可以使用std::is_same
来检查两个类型是否完全相同。有没有办法检查两个类型是否相同,除了const
或&
修饰符之外?下面是一个例子:
#include <type_traits>
#include <iostream>
using namespace std;
int main() {
cout << boolalpha;
cout << is_same<char,int>::value << endl; // false - OK
cout << is_same<char,char>::value << endl; // true - OK
cout << is_same<char,const char>::value << endl; // false - should be true
cout << is_same<char,const char&>::value << endl; // false - should be true
}
3条答案
按热度按时间w41d8nur1#
从C++20起std::remove_cvref将支持移除cv限定符并返回非引用类型
但是,在当前标准中,您可以结合使用类型修改功能
或者可能创建类型别名,如
ego6inou2#
我找到了另一个解决办法:我们可以添加const和&,而不是删除它们:
事实上:
p3rjfoxz3#
在很多情况下,
std::is_same_v<std::decay_t<TYPE_TO_TEST>, TYPE_TO_COMPARE>
就可以了。std::decay_t<TYPE>
还可以将数组类型转换为指向数组成员的指针,所以std::is_same_v<std::decay_t<int[5]>, int*>
也会产生true。但是在很多情况下,这种行为甚至是有益的,特别是当你的测试需求是“可以像指针一样使用”时。