复制构造函数中的类型

时间:2012-07-03 06:57:09

标签: c++

  

可能重复:
  Is there a difference in C++ between copy initialization and direct initialization?

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;

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

A a(b);
A a = b;

这些使用隐式生成的copy constructor

a = b;

这个使用assignment operator,而不是初始化,因为它不会创建A对象:它只为现有对象提供新值。

复制构造函数将具有诸如

之类的签名
A(const A&);

和赋值运算符

A& operator=(const A&);

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

答案 2 :(得分:1)

由于您的类没有任何显式的复制构造函数,因此上述所有语句都会产生浅层复制。

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

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

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

阅读this以获得更多理解