在以下代碼中,它輸出兩個不同的內存位置。這對我來說是有道理的,因爲我是以價值回報。複製構造函數的存在導致函數通過引用而不是值返回
#include <iostream>
using namespace std;
class Foo {
public:
Foo() {}
// Foo (const Foo &) { cout << "Copy con" << endl; }
};
Foo test() {
Foo foo;
cout << &foo << endl;
return foo;
}
int main() {
Foo foo = test();
cout << &foo << endl;
}
然而,如果我去掉在上面的代碼拷貝構造並再次運行它,它輸出兩次相同的存儲器位置。爲什麼?它根本不打印出「Copy con」,所以我知道拷貝構造函數沒有被調用。看起來,僅僅存在一個拷貝構造函數會導致某種優化,即使它沒有被調用。
我正在編譯GCC 4.6.3上的「g ++ -Wall test.cpp -o test」。
copy elision ... –