提问人:cbhattac 提问时间:10/1/2023 更新时间:10/2/2023 访问量:54
使用术语“direct-non-list-initializes”而不是“copy constructs”的可选复制构造函数
Copy constructor of optional using term "direct-non-list-initializes" instead of "copy constructs"
问:
在 C++ 标准中,可选的复制构造函数定义如下:
constexpr optional(const optional& rhs);
Effects: If rhs contains a value, direct-non-list-initializes the contained value with *rhs.
如果包含一个值,它将被复制构造,并且由于复制构造函数被定义为删除,除非is_copy_constructible_v为真,为什么标准使用更通用的“direct-non-list-initialization”而不是说?rhs
"If rhs contains a value, it 'copy constructs' the contained value with *rhs"
答:
1赞
273K
10/1/2023
#1
如果 ,则两者都是直接初始化的。但是,如果具有初始值设定项列表构造函数,则对于大括号初始化项(列表初始化),它将始终优先于其他构造函数。如果同时具有复制构造函数和 initializer-list 构造函数,则后者用于 。A a
A a1(a)
A a2{a}
A
A
A a2{a}
效果:如果包含值,则 direct-non-list-初始化包含的值。
rhs
*rhs
该标准要求使用直接初始化的复制构造函数,如果删除了复制构造函数,则不得使用 direct-list-initializing 构造函数。A(const A&)
评论
0赞
Jan Schultke
10/2/2023
没有“直接复制初始化”这样的东西。我认为您的意思是“直接初始化”,并且将调用复制构造函数。
0赞
273K
10/2/2023
我只是说使用复制构造函数直接初始化,我没有使用任何特定术语,否则我会将它们设置为斜体。
评论
T copy(source);
T copy = source;
T copy{source};
T copy = {source};
)