例如在下面的代碼:編譯器何時在C++中創建複製構造函數?
class HowMany {
static int objectCount;
public:
HowMany() {
objectCount++;
}
static void print(const string& msg = "") {
if(msg.size() != 0)
cout << msg << ": ";
cout << "objectCount = " << objectCount << endl;
}
~HowMany() {
objectCount--;
print("~HowMany()");
}
};
int HowMany::objectCount = 0;
// Pass and return BY VALUE:
HowMany f(HowMany x) {
x.print("x argument inside f()");
return x;
}
int main() {
HowMany h;
HowMany::print("after construction of h");
HowMany h2 = f(h);
HowMany::print("after call to f()");
}
爲什麼編譯器不會自動爲類的howmany創建拷貝構造函數,逐位拷貝發生時調用至f(h)發生地方?
在什麼情況下,編譯器創建默認的複製構造函數,以及在什麼情況下它不創建?
它給輸出爲:
施工小時後:objectCount = 1
X內˚F()的參數:objectCount = 1周
〜的howmany():objectCount = 0
呼叫f()後:objectCount = 0
〜HowMany():objectCount = -1
〜的howmany():objectCount = -2
許多許多由於事先
你怎麼知道itd不會創建? (順便說一句,你的頭銜說「有」,你的問題說「不」),首先解決。) – Nawaz
檢查它的輸出。我問,什麼時候它自動創建,什麼時候不創建。 – Luv
輸出在哪裏?你希望我們編譯並執行你的代碼來查看輸出結果嗎?然後回答它? – Nawaz