考虑以下声明: -
Class A a = b;//Where is b is existing object of class A.
A类有复制构造函数和赋值运算符重载(已实现)。在这种情况下,将调用上述语句,复制构造函数或赋值运算符,还是两者都被调用?
答案 0 :(得分:6)
这称为 Copy initialization 。
复制初始化定义为:
T t2 = t1;
根据t1
的类型,可能有两种情况:
如果
t1
不属于类型T
:
t1
转换为类型 T
t2
。如果
t1
属于类型T
:
t1
复制到t2
。请注意,复制构造函数调用可能省略 copy elision 。
此处不涉及任务。仅在将已构造的对象分配给另一个对象时才会进行分配。您的代码语句在一个语句中涉及构造和值赋值,因此本身没有赋值。
答案 1 :(得分:2)
在这种情况下,将调用复制构造函数。因为“A类”类对象“a”被构造成复制已经构造的“A类”对象b的值。
调用赋值运算符的可能性不会影响两个已创建的对象。