我想接受“可简单复制”的类,从某种意义上说,如果我将该类型的一个变量的字节表示形式复制到另一个变量中,它将可用,并且不会以任何方式破坏任何内容。
std::is_trivially_copyable
,我看到要求是:
- 至少有一个复制构造函数、移动构造函数、复制赋值运算符或移动赋值运算符符合条件
- 每个符合条件的复制构造函数(如果有)都是微不足道的
- 每个符合条件的移动构造函数(如果有)都是微不足道的
- 每个合格的复制赋值运算符(如果有的话)都是微不足道的
- 每个符合条件的移动赋值运算符(如果有)都是微不足道的
- 有一个简单的非删除析构函数
第一个和最后一个要求 - 检查。但其他要求超强不是我想要的!我愿意“妥协”有一个琐碎的复制者作为要求,这已经与我真正想要的完全不同了。
那么,我可以使用标准库中的什么类型特征,或者自己编写什么类型特征来表达我感兴趣的约束?
我现在正在编写 C++11,因此如果您的答案需要更高的标准 - 请编写它,但明确提及这一事实。
- 至少有一个复制构造函数、移动构造函数、复制赋值运算符或移动赋值运算符符合条件
- 有一个简单的非删除析构函数
第一个和最后一个要求 - 检查。但其他要求超强
那么,我可以使用标准库中的什么类型特征,或者自己编写什么类型特征来表达我感兴趣的约束?
您可以使用
(is_copy_constructible || is_move_constructible || is_assignable) && std::is_trivially_destructible
。
我愿意“妥协”以一个微不足道的...复制者作为要求
您可以使用
std::is_trivially_copy_constructible
。
如果我将该类型的一个变量的字节表示复制到另一个变量中,它将可用,并且不会以任何方式破坏任何内容。
但是,这些要求还不够。为此你需要“超强”的要求。这就是
std::is_trivially_copyable
的用途。