2013-10-28 9 views

回答

1

示例代碼與示例代碼兩個是否相等?

是,這兩個對象foo2foo3將包含相同valuefoo。你can see這兩個成員變量的value是一樣的。

由於Johan Lundberg作出通知,Foo foo2 = foo;只適用於如果未聲明構造函數explicit(就像你的情況)。

他們都調用複製構造函數嗎?

在這種情況下,他們都會調用複製構造函數。請注意,如果:

Foo foo2 = foo; 

是:

Foo foo2(0); 
foo2 = foo; 

會有在Foo(int)構造函數的調用,然後到operator=功能,而不是打電話。

+0

只要構造函數不明確。 –

0

這兩個語句不是等價的:foo2在概念上由foo的副本初始化,而foo3直接複製foo。在您的代碼中,您看不到差異,但如果您製作Foo的複製構造函數explicit,則foo2的初始化在foo3的初始化確實有效時不起作用。

相關問題