gpt4 book ai didi

c++ - C++对象构造—直接初始化与使用 '='运算符是否等效?

转载 作者:行者123 更新时间:2023-12-01 14:47:42 25 4
gpt4 key购买 nike

在C++中,这两种初始化类对象的样式在功能上是否等效,或者在某些情况下它们可能具有不同的语义并生成不同的代码?

SomeClass foo(1,2,3);


auto foo = SomeClass(1,2,3);

最佳答案

第一个是direct initialization

第二个是copy initialization,概念foo是从直接初始化的临时SomeClass复制初始化的。 (顺便说一句,它与operator=无关;它是初始化的,而不是赋值的。)

由于mandatory copy elision(自C++ 17起),它们具有完全相同的效果,因此该对象将由相应的构造函数直接初始化。

In the initialization of an object, when the initializer expression is a prvalue of the same class type (ignoring cv-qualification) as the variable type:

T x = T(T(f())); // only one call to default constructor of T, to initialize x


在C++ 17之前,复制省略是一种优化;即使可以省略复制/移动构造,也必须使用适当的复制/移动构造函数;如果不是(例如,构造函数标记为 explicit),则第二种样式将无效,而第一种样式则可以。

This is an optimization: even when it takes place and the copy/move (since C++11) constructor is not called, it still must be present and accessible (as if no optimization happened at all), otherwise the program is ill-formed:

关于c++ - C++对象构造—直接初始化与使用 '='运算符是否等效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62226696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com