【发布时间】:2018-10-19 17:58:01
【问题描述】:
我已经读过 C++ 入门书,而且就是这么说的
实现可以选择分两步处理这个语句:使用复制构造函数创建一个临时对象,然后使用赋值将值复制到新对象。也就是说,初始化总是调用一个复制构造函数,并形成使用= 运算符也可以调用赋值运算符
而且我还在一些网站上读到说A a2 = a1; 之类的代码与A a2(a1); 相同,这意味着A a2 = a1 仅调用复制构造函数。
所以我的问题是,当程序仅使用复制构造函数以及同时使用复制构造函数和赋值运算符时。谁来决定,是编译器吗?
【问题讨论】:
-
对于
A a2 = a1;,您没有分配(尽管使用了=)。它是初始化(和简单的复制构造)。有了A a1, a2; a2 = a1;,你就有了assignment。 -
阅读标准中关于“复制初始化”的规则。
-
初始化从不使用赋值操作符,C++ Primer Plus是个糟糕的学习资源。
标签: c++