我注意到标准库中有这三种类型特征:
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_constructible
,is_nothrow_constructible
和is_trivially_constructible
用于询问是否可以根据参数序列构造类型。显然,nothrow
和trivially
版本对选定的构造函数增加了其他要求。它们是可变的。 is_copy/move_constructible
不是。
所以这不是一回事。普通的constructible
版本或多或少是更集中的copy/move
版本的功能超集。实际上,其他(大多数)是根据constructible
形式定义的。