如果我編譯(在G ++下)並運行下面的代碼,它將打印「Foo :: Foo(int)」。但是,在使複製構造函數和賦值運算符爲私有之後,它將無法編譯以下錯誤:「error:'Foo :: Foo(const Foo &)'是私有的」。如果它僅在運行時調用標準構造函數,它如何需要一個複製構造函數?構造函數訪問規則
#include <iostream>
using namespace std;
struct Foo {
Foo(int x) {
cout << __PRETTY_FUNCTION__ << endl;
}
Foo(const Foo& f) {
cout << __PRETTY_FUNCTION__ << endl;
}
Foo& operator=(const Foo& f) {
cout << __PRETTY_FUNCTION__ << endl;
return *this;
}
};
int main() {
Foo f = Foo(3);
}
如果你聲稱它使用了複製構造函數,爲什麼你沒有看到它在輸出中。原始海報明確指出只有:: Foo(int)被調用。 – KIV 2009-05-19 10:39:53