这两行之间有什么不同吗?

far*_*dgn 6 c++

我们可以用两种方式创建一个对象:

myClass myObject = myClass(123);
//or
myClass myObject(123);
Run Code Online (Sandbox Code Playgroud)

这两者之间的背景有什么不同吗?我想使用第一个,但似乎结合这两行:

myClass myObject;
myObject= myClass(123);
Run Code Online (Sandbox Code Playgroud)

第二个也做同样的事情吗?

小智 10

myClass myVariable = myClass(123);
Run Code Online (Sandbox Code Playgroud)

复制初始化.

myClass myVariable(123);
Run Code Online (Sandbox Code Playgroud)

直接初始化.

myClass myVariable;
myVariable = myClass(123);
Run Code Online (Sandbox Code Playgroud)

默认初始化,然后是复制(或移动)分配.

通常,前两个是相同的,因为复制省略.相关规则可以在[class.copy]/31(N4140,C++ 14草案标准)中找到:

当满足某些条件时,允许实现省略类对象的复制/移动构造[...]:

- 当一个未绑定到引用(12.2)的临时类对象被复制/移动到具有相同cv-nonqualified类型的类对象时,可以通过将临时对象直接构造到该对象中来省略复制/移动操作.省略的复制/移动的目标