C++中带有示例的std::is_same模板
C++ STL中的 std::is_same 模板存在于 < type_traits>头文件中。C++ STL的 std::is_same 模板用于检查类型 A 是否与类型 B 相同。如果两者相同,则返回布尔值true,否则返回false。
头文件:
#include <type_traits>
模板类:
template <class A, class B>
struct is_same
template <class A, class B>
inline constexpr
bool is_same_v
= is_same<A, B>::value
语法:
std::is_same<A, B>::value
参数: 该 std::is_same 模板接受以下参数:
- A: 它代表第一个类型。
- B: 它代表第二个类型。
返回值: 模板 std::is_same 返回下面的布尔变量:
- True: 如果类型 A 与类型 B 相同。
- False: 如果类型 A 与类型 B 不同。
下面是在C++中演示 std::is_same 的程序:
程序:
// C++中演示std::is_same的程序
#include <bits/stdc++.h>
#include <type_traits>
using namespace std;
// 主函数
int main()
{
cout << boolalpha;
cout << "is int & int32_t相同吗? "
<< is_same<int, int32_t>::value
<< endl;
cout << "is int & int64_t相同吗? "
<< is_same<int, int64_t>::value
<< endl;
cout << "is float & int32_t相同吗? "
<< is_same<float, int32_t>::value
<< endl;
cout << "is int & int相同吗? "
<< is_same<int, int>::value << endl;
cout << "is int & unsigned int相同吗? "
<< is_same<int, unsigned int>::value
<< endl;
cout << "is int & signed int相同吗? "
<< is_same<int, signed int>::value
<< endl;
return 0;
}
is int & int32_t相同吗? true
is int & int64_t相同吗? false
is float & int32_t相同吗? false
is int & int相同吗? true
is int & unsigned int相同吗? false
is int & signed int相同吗? true
程序2:
//C++示例程序,演示std::is_same的用法
#include <bits/stdc++.h>
#include <type_traits>
using namespace std;
typedef int integer_type;
//声明结构体
struct A {
int x, y;
};
struct B {
int x, y;
};
typedef A C;
//主函数
int main()
{
cout << boolalpha;
cout << "is_same:" << endl;
cout << "int, const int is_same: "
<< is_same<int, const int>::value
<< endl;
cout << "int, integer_type is_same: "
<< is_same<int, integer_type>::value
<< endl;
cout << "A, B is_same: "
<< is_same<A, B>::value
<< endl;
cout << "A, C is_same: "
<< is_same<A, C>::value
<< endl;
cout << "signed char, int8_t is_same: "
<< is_same<signed char, int8_t>::value
<< endl;
return 0;
}
is_same:
int, const int is_same: false
int, integer_type is_same: true
A, B is_same: false
A, C is_same: true
signed char, int8_t is_same: true