我注意到标准库中有这三种类型特征:

std::is_nothrow_constructible       // (1)
std::is_nothrow_copy_constructible  // (2)
std::is_nothrow_move_constructible  // (3)


(2)(3)的含义从名称中可以清楚地看出,但(1)的实际含义是什么?它是(2)(3)的逻辑与,是(2)(3)的逻辑或,还是其他?

同样,我们可以将nothrow替换为trivially,将constructible替换为assignable

最佳答案

is_constructibleis_nothrow_constructibleis_trivially_constructible用于询问是否可以根据参数序列构造类型。显然,nothrowtrivially版本对选定的构造函数增加了其他要求。它们是可变的。 is_copy/move_constructible不是。

所以这不是一回事。普通的constructible版本或多或少是更集中的copy/move版本的功能超集。实际上,其他(大多数)是根据constructible形式定义的。

10-04 15:09