2

考虑以下陈述:-

Class A a = b;//Where is b is existing object of class A.

A类同时具有复制构造函数和赋值运算符重载(实现)。那么在这种情况下,将调用上述语句,复制构造函数或赋值运算符或两者?

4

2 回答 2

6

这称为复制初始化

复制初始化定义为:

T t2 = t1;

根据类型t1两种情况是可能的:

如果t1不是类型 T

  • 它尝试使用隐式转换序列转换t1类型,并且 T
  • 然后t2通过调用复制构造函数将创建的对象复制到其中。

如果t1类型 T

  • 它通过调用复制构造函数复制t1到。t2

请注意,虽然复制构造函数调用可能会通过复制省略被省略。


这里不涉及任务。仅当您将已构造的对象分配给另一个时,才会发生分配。您的代码语句在一个语句中涉及构造和赋值,因此本身没有赋值。

于 2013-03-19T07:10:57.377 回答
2

在这种情况下,复制构造函数被调用。因为“A 类”类对象“a”是复制已构建的“A 类”对象 b 的值而构建的。

不可能调用作用于两个已创建对象的赋值运算符。

于 2013-03-19T07:38:33.890 回答