爲什麼這段代碼無法編譯?如果我將拷貝構造函數的訪問級別更改爲public,它將會正常並打印「Foo :: Foo(int)」。如果我寫「Foo實例(0);」而不是「Foo實例= 0;」它也會好的。爲什麼?這種行爲有什麼意義?帶有一個參數的私有拷貝構造函數和構造函數
#include <iostream>
struct Foo
{
public:
int i;
Foo(int i) : i(i) { std::cout << "Foo::Foo(int) \n"; }
private:
Foo(const Foo&) { std::cout << "Foo::Foo(const Foo&) \n"; }
};
int main()
{
Foo instance = 0;
}
但它會打印出 「富::美孚(INT)」。它是編譯器優化嗎? – FrozenHeart
@NikitaTrophimov是的,複製構造函數必須是可見的,但它不必被調用。 –
@NikitaTrophimov請參閱http://stackoverflow.com/questions/12953127/what-are-copy-elision-and-return-value-optimization –