std::is_trivially_copyable 太强了,我该用什么来代替?

问题描述 投票:0回答:1

我想接受“可简单复制”的类,从某种意义上说,如果我将该类型的一个变量的字节表示形式复制到另一个变量中,它将可用,并且不会以任何方式破坏任何内容。

查看

std::is_trivially_copyable
,我看到要求是:

  • 至少有一个复制构造函数、移动构造函数、复制赋值运算符或移动赋值运算符符合条件
  • 每个符合条件的复制构造函数(如果有)都是微不足道的
  • 每个符合条件的移动构造函数(如果有)都是微不足道的
  • 每个合格的复制赋值运算符(如果有的话)都是微不足道的
  • 每个符合条件的移动赋值运算符(如果有)都是微不足道的
  • 有一个简单的非删除析构函数

第一个和最后一个要求 - 检查。但其他要求超强不是我想要的!我愿意“妥协”有一个琐碎的复制者作为要求,这已经与我真正想要的完全不同了。

那么,我可以使用标准库中的什么类型特征,或者自己编写什么类型特征来表达我感兴趣的约束?

我现在正在编写 C++11,因此如果您的答案需要更高的标准 - 请编写它,但明确提及这一事实。

c++ c++11 type-traits default-copy-constructor trivially-copyable
1个回答
3
投票
  • 至少有一个复制构造函数、移动构造函数、复制赋值运算符或移动赋值运算符符合条件
  • 有一个简单的非删除析构函数

第一个和最后一个要求 - 检查。但其他要求超强

那么,我可以使用标准库中的什么类型特征,或者自己编写什么类型特征来表达我感兴趣的约束?

您可以使用

(is_copy_constructible || is_move_constructible || is_assignable) && std::is_trivially_destructible

我愿意“妥协”以一个微不足道的...复制者作为要求

您可以使用

std::is_trivially_copy_constructible

如果我将该类型的一个变量的字节表示复制到另一个变量中,它将可用,并且不会以任何方式破坏任何内容。

但是,这些要求还不够。为此你需要“超强”的要求。这就是

std::is_trivially_copyable
的用途。

© www.soinside.com 2019 - 2024. All rights reserved.