struct Foo {
int value;
Foo(int v):value(v) {};
};
Foo foo=10;
代碼示例之一:關於在C++中複製初始代碼樣本是否相同?
Foo foo2=foo;
代碼示例2:
Foo foo3(foo);
是示例代碼兩個相等的與樣本代碼的一個?
struct Foo {
int value;
Foo(int v):value(v) {};
};
Foo foo=10;
代碼示例之一:關於在C++中複製初始代碼樣本是否相同?
Foo foo2=foo;
代碼示例2:
Foo foo3(foo);
是示例代碼兩個相等的與樣本代碼的一個?
示例代碼與示例代碼兩個是否相等?
是,這兩個對象foo2
和foo3
將包含相同value
爲foo
。你can see這兩個成員變量的value
是一樣的。
由於Johan Lundberg作出通知,Foo foo2 = foo;
只適用於如果未聲明構造函數explicit
(就像你的情況)。
他們都調用複製構造函數嗎?
在這種情況下,他們都會調用複製構造函數。請注意,如果:
Foo foo2 = foo;
是:
Foo foo2(0);
foo2 = foo;
會有在Foo(int)
構造函數的調用,然後到operator=
功能,而不是打電話。
這兩個語句不是等價的:foo2
在概念上由foo
的副本初始化,而foo3
直接複製foo
。在您的代碼中,您看不到差異,但如果您製作Foo
的複製構造函數explicit
,則foo2
的初始化在foo3
的初始化確實有效時不起作用。
只要構造函數不明確。 –