我们可以用两种方式创建一个对象:
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类型的类对象时,可以通过将临时对象直接构造到该对象中来省略复制/移动操作.省略的复制/移动的目标