这里有理论上的疑问。阅读一本书,并给出以下声明:StringBad metoo = knot;
其中:
- StringBad 是一个类
- 结是该类的对象
作者对复制构造函数说了以下内容:
实现可以选择分两步处理此语句:使用复制构造函数创建临时对象,然后使用赋值将值复制到新对象。也就是说,初始化总是调用复制构造函数,并使用 = 运算符形成也可以调用赋值运算符。
我的实现一步完成:
- 使用复制构造函数创建 metoo 对象,与 this 相同:
StringBad metoo(knot);
我可以理解其他实现可以通过如下两个步骤来完成:
- 使用默认构造函数创建一个 metoo 对象,例如:
StringBad metoo;
- 使用重载赋值运算符将节点对象分配给metoo 对象。
但是作者说初始化总是调用复制构造函数。那是对的吗?如果是这样,编译器在某些实现中将遵循哪些步骤以分两步完成?我无法在我的事业中对其进行测试,正如我所说的那样,它是一步完成的。