std::is_same用于编译期判断两个类型是否完全相同,其value成员在类型匹配时为true,否则false,比较结果受const、volatile、引用等影响;C++14提供简写std::is_same_v;常用于if constexpr、模板特化和SFINAE中实现类型分支或约束。

std::is_same 是 C++ 标准库中 <type_traits> 头文件提供的一个类型特征(type trait),用来在编译期判断两个类型是否完全相同。它返回一个布尔值,通过其成员常量 value 获取结果。
std::is_same<T, U>::value 在 T 和 U 是同一个类型时为 true,否则为 false。这个比较是精确的,包括 const、volatile、引用等都会影响结果。
示例代码:
#include <type_traits>
#include <iostream>
int main() {
std::cout << std::boolalpha;
std::cout << std::is_same<int, int>::value << "\n"; // true
std::cout << std::is_same<int, const int>::value << "\n"; // false
std::cout << std::is_same<int, int&>::value << "\n"; // false
std::cout << std::is_same<int, long>::value << "\n"; // false
}在模板编程中,常配合 if constexpr 实现编译期分支,根据类型是否相同执行不同逻辑。
立即学习“C++免费学习笔记(深入)”;
template <typename T>
void process(const T& value) {
if constexpr (std::is_same_v<T, int>) {
std::cout << "Processing int: " << value << "\n";
} else if constexpr (std::is_same_v<T, std::string>) {
std::cout << "Processing string: " << value << "\n";
} else {
std::cout << "Unsupported type\n";
}
}注意:C++14 起提供了变量模板简写 std::is_same_v<T, U>,等价于 std::is_same<T, U>::value,更简洁。
可用于控制函数模板的启用条件,比如使用 enable_if_t 限制参数类型。
#include <type_traits>
template <typename T>
std::enable_if_t<std::is_same_v<T, double>, void>
special_func(T value) {
std::cout << "Called with double: " << value << "\n";
}
template <typename T>
std::enable_if_t<!std::is_same_v<T, double>, void>
special_func(T value) {
std::cout << "Not a double\n";
}int 和 unsigned int 不同。
- 指针类型也要注意,int* 和 const int* 不一样。
- 引用类型:int& 和 int 被视为不同类型。
- 可用 std::remove_const_t、std::decay_t 等辅助 trait 先标准化类型再比较。
基本上就这些,std::is_same 是类型判断的基础工具,搭配其他 type traits 和模板机制能实现灵活的泛型逻辑。
以上就是c++++中的std::is_same这类type traits怎么用_c++ type traits is_same使用方法的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号