擁有一個公共拷貝構造函數將會使小程序 編譯,但不會顯示副本「Copy」。爲什麼即使未被調用也需要公共拷貝構造函數?
#include <iostream>
class X
{
public:
X(int) { std::cout << "Construct" << std::endl; }
// Having a public copy constructor will make the little program
// compile, but not showing the side effect "Copy".
private:
X(const X&) { std::cout << "Copy" << std::endl; }
private:
X& operator = (const X&);
};
int main() {
X x = 1;
return 0;
}
X x = 1意味着X x(X(1))就我所知,但它被優化到X x(1); – odinthenerd
這是必需的,以便C++代碼在可能或不可以自行決定執行copy elision的實現之間是可移植的。 – jrok
嘗試使用'-fno-elide-constructors'標誌進行編譯。 –