C++ 复制构造函数中的类型

C++ 复制构造函数中的类型,c++,C++,可能重复: 嗨,当我调用或初始化上述类的对象时,你能告诉我它们之间的区别吗 A a(b); A a=b; a=b; 前两行调用复制构造函数,因为正在构造对象。 最后一行将调用equals运算符来执行赋值。前两行调用复制构造函数,因为正在构造对象。 最后一行将调用equals运算符来执行赋值。因为您的类没有任何显式的复制构造函数,所以上述所有语句都会导致浅复制 如果声明了复制构造函数并重载了=运算符,则 A(b)和A=b将导致调用复制构造函数和 a=b将导致调用=重载运算符 阅读以获得更多理解

可能重复:

嗨,当我调用或初始化上述类的对象时,你能告诉我它们之间的区别吗

A a(b);
A a=b;
a=b;

前两行调用复制构造函数,因为正在构造对象。
最后一行将调用equals运算符来执行赋值。

前两行调用复制构造函数,因为正在构造对象。
最后一行将调用equals运算符来执行赋值。

因为您的类没有任何显式的复制构造函数,所以上述所有语句都会导致浅复制

如果声明了复制构造函数并重载了=运算符,则

A(b)和A=b将导致调用复制构造函数和

a=b将导致调用=重载运算符


阅读以获得更多理解

,因为您的类没有任何显式的复制构造函数,所有上述语句都会导致浅复制

A a(b);
A a = b;
如果声明了复制构造函数并重载了=运算符,则

A(b)和A=b将导致调用复制构造函数和

a=b将导致调用=重载运算符

阅读以获得更多的理解

A a(b);
A a = b;
它们使用隐式生成的

这一个使用,并且它不是初始化,因为它不创建
对象:它只是给现有对象一个新值

复制构造函数将有一个签名,如

A(const A&);
和赋值运算符

A& operator=(const A&);
由于您的类不提供这些,编译器将合成它们,并只复制数据成员

它们使用隐式生成的

这一个使用,并且它不是初始化,因为它不创建
对象:它只是给现有对象一个新值

复制构造函数将有一个签名,如

A(const A&);
和赋值运算符

A& operator=(const A&);
由于您的类不提供这些,编译器将合成它们,并只复制数据成员