0

可能重复:
复制初始化和直接初始化在 C++ 中有区别吗?

Class A
{
public:
   //some member function call
private:
   int x;
   char a;
};
int main()
{
   A a;
   A b;
}

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

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

3 回答 3

3

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

于 2012-07-03T06:59:17.317 回答
2
A a(b);
A a = b;

这些使用隐式生成的复制构造函数

a = b;

这个使用赋值运算符,它不是初始化,因为它不创建A对象:它只是给现有对象一个新值。

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

A(const A&);

和赋值运算符

A& operator=(const A&);

由于您的类不提供这些,因此编译器会合成它们并仅复制数据成员。

于 2012-07-03T07:00:10.497 回答
1

由于您的类没有任何显式复制构造函数,所有上述语句都会导致浅拷贝。

如果您声明了一个复制构造函数并重载了 = 运算符,那么

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

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

阅读本文以获得更多理解

于 2012-07-03T06:59:58.693 回答