【发布时间】:2012-08-14 15:24:46
【问题描述】:
这里有理论上的疑问。读了一本书,并给出了这样的声明:StringBad metoo = knot; where:
- StringBad 是一个类
- knot 是该类的对象
作者对复制构造函数说了以下内容:
实现可以选择以两种方式处理此语句 步骤:使用复制构造函数创建一个临时对象和 然后使用赋值将值复制到新对象。也就是说, 初始化总是调用一个复制构造函数,并使用 = 运算符也可以调用赋值运算符。
我的实现一步完成:
- 使用复制构造函数创建metoo对象,与此相同:
StringBad metoo(knot);
我可以理解,其他实现可以通过这样的两个步骤来完成:
- 使用默认构造函数创建一个metoo对象,例如:
StringBad metoo; - 使用重载的赋值运算符将节点对象分配给metoo对象。
但是作者说初始化总是调用复制构造函数。那是对的吗?如果是这样,编译器在某些实现中将遵循哪些步骤以分两步完成?我无法在我的事业中对其进行测试,正如我所说的一步完成。
【问题讨论】:
-
StringBad metoo();实际上将metoo声明为一个不带参数并返回StringBad的函数,您的意思可能是StringBad metoo;或StringBad metoo{};。 -
@Mankarse,谢谢。更正了。
-
Ewww,糟糕的书。引用的文字有很多错误,因此开始毫无意义。找一本不同的书。
标签: c++ class copy-constructor assignment-operator object-initialization