2014-07-03 15 views
0

我是新来的C++。 我被告知在内部或外部调用构造函数是相同的。 为什么赋值操作没有涉及明确调用构造函数的情况?如何隐式地调用一个构造函数并调用一个构造函数明确证明是相同的

Object A(3)    //implicit 
Object A = Object(3);  //explicit 

我认为当我们做Object(3)时会创建一个对象; 那么这两件事情怎么会变得一样呢?

+0

因为虽然它使用赋值运算符,但它不是赋值。这是一个复制构造函数调用(允许对其进行优化,第2行可能与第1行完全相同)。 – Simple

+0

这两者在语义上有所不同,可能做得完全一样,并且不管结果如何都应该具有相同的结果。 – juanchopanza

+0

这些都是显式调用的构造函数。 –

回答

0

有关主题的更多内容,请参阅this answer,但在处理已存在的对象时将调用赋值运算符。您会注意到复制构造函数的类似行为:

Object A; 
// the following two lines will call the copy constructor 
// even if the assignment operator is defined. 
Object B = A; 
Object C(A); 
相关问题