可能重复:
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;
答案 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以获得更多理解