std::is_same
2025年5月18日,周日晚上
std::is_same
是 C++11 引入的模板元编程工具,用于在编译时判断两个类型是否完全相同。它定义在 <type_traits>
头文件中,属于类型特性(type traits)的一部分。
以下是其核心特性和用法:
-
基本功能
• 通过std::is_same<T, U>::value
返回bool
值,若T
和U
是同一类型(包括typedef
别名或完全相同的定义),则返回true
,否则返回false
。• 示例:
bool isInt = std::is_same<int, int>::value; // true bool isDiff = std::is_same<int, double>::value; // false
-
关键细节
• 严格类型匹配:忽略 CV 限定符(如const
、volatile
)和引用修饰符。例如std::is_same<int, const int>::value
返回false
。• 别名识别:能识别通过
typedef
或using
定义的类型别名。例如:typedef int MyInt; bool isAlias = std::is_same<int, MyInt>::value; // true
-
应用场景
• 模板元编程:在泛型代码中根据类型分支处理,例如:template<typename T> void foo(T data) {if (std::is_same<T, int>::value) { /* int 特化处理 */ } }
• 静态断言:结合
static_assert
在编译时强制类型约束。
总结
std::is_same
是编译时类型检查的核心工具,适用于泛型编程、类型安全校验等场景,强调精确的类型匹配逻辑。