复制构造函数或赋值运算符或两者,这里调用?

Hem*_*nth 2 c++

请考虑以下声明: -

Class A a = b;//Where is b is existing object of class A.
Run Code Online (Sandbox Code Playgroud)

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

Alo*_*ave 6

这称为复制初始化.

复制初始化定义为:

T t2 = t1;
Run Code Online (Sandbox Code Playgroud)

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

如果t1不是类型 T:

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

如果t1是这种类型 T:

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

请注意,复制构造函数调用可能会通过复制省略省略.


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

  • 为什么你认为A类的临时对象是在这里创建的?注释中所述的"b"已经是"A类"的对象.如果b不是"A类"的对象,则会创建临时AFAIK.在我看来,我们有"直接初始化"案例...... (2认同)