在C++中使用std::is_trivially_default_constructible模版类及示例
C++ STL中的 std::is_trivially_default_constructible 模版类存在于 **
头文件:
#include<type_traits>
模版类:
template< class T >
struct is_default_constructible;
语法:
std::is_trivially_default_constructible<T>::value
参数: 模版类 std::is_trivially_default_constructible 接受单个参数 T(Trait class) 以检查 T 是否为平凡默认构造类型。
返回值: 模版类 std::is_trivially_default_constructible 返回布尔变量,如下所示:
- 真: 如果类型 T 是平凡默认构造类型。
- 假: 如果类型 T 不是平凡默认构造类型。
下面是C++中演示 std::is_trivially_default_constructible 的程序:
程序1:
// C++ program to demonstrate
// std::is_trivially_default_constructible
#include <iostream>
#include <type_traits>
using namespace std;
// 声明类
class A {
};
class B {
B() {}
};
enum class C : int { x,
y,
z };
class D {
int v1;
double v2;
public:
D(int n)
: v1(n), v2()
{
}
D(int n, double f)
noexcept : v1(n), v2(f) {}
};
int main()
{
cout << boolalpha;
// 检查int是否为
// 平凡默认构造类型
cout << "int: "
<< is_trivially_default_constructible<int>::value
<< endl;
// 检查类A是否为
// 平凡默认构造类型
cout << "class A: "
<< is_trivially_default_constructible<A>::value
<< endl;
// 检查类B是否为
// 平凡默认构造类型
cout << "class B: "
<< is_trivially_default_constructible<B>::value
<< endl;
// 检查枚举类C是否为
// 平凡默认构造类型
cout << "enum class C: "
<< is_trivially_default_constructible<C>::value
<< endl;
// 检查类D是否为平凡默认构造类型
std::cout << "class D: "
<< is_trivially_default_constructible<D>::value
<< endl;
return 0;
}
int: true
class A: true
class B: false
enum class C: true
class D: false
程序2:
// C++程序演示std::is_trivially_default_constructible的使用
#include <iostream>
#include <type_traits>
using namespace std;
// 声明结构体
struct Ex1 {
Ex1() {}
Ex1(Ex1&&) {
cout << "抛出移动构造函数!";
}
Ex1(const Ex1&) {
cout << "抛出复制构造函数!";
}
};
struct Ex2 {
Ex2() {}
Ex2(Ex2&&) noexcept {
cout << "非抛出移动构造函数!";
}
Ex2(const Ex2&) noexcept {
cout << "非抛出复制构造函数!";
}
};
// 主函数
int main() {
cout << boolalpha;
// 检查结构体Ex1是否可默认构造
cout << "Ex1是否可默认构造?"
<< is_trivially_default_constructible<Ex1>::value
<< '\n';
// 检查结构体Ex1是否是平凡默认构造
cout << "Ex1是否是平凡默认构造?"
<< is_trivially_default_constructible<Ex1>::value
<< '\n';
// 检查结构体Ex2是否是平凡默认构造
cout << "Ex2是否是平凡默认构造?"
<< is_trivially_default_constructible<Ex2>::value
<< '\n';
}
Ex1是否可默认构造?false
Ex1是否是平凡默认构造?false
Ex2是否是平凡默认构造?false