類A定義的所有複製/移動的構造/分配如下被稱爲無複製/移動的構造/分配的同時初始化
A f(A a) { return a; }
A g() { return A(); }
的main()
功能是這樣的:
int main()
{
A a1 = f(A()); // Move-construct
A a2 = std::move(a1); // Move-construct
A a3 (std::move(a2)); // Move-construct
A a4 (a1); // Copy-construct
A a5 = a4; // Copy-construct
a5 = f(A()); // Move constructor + Move assignment
a5 = a4; // Copy assignment
a5 = g(); // Move assignment
A a6 = g(); // None!! Member-wise assignment (?)
}
可有人告訴我,爲什麼地球上沒有任何一個構造函數和賦值操作符被調用a6
? C++ 11文檔的哪一部分描述了這種行爲?
http://en.wikipedia.org/wiki/Return_value_optimization – user1937198 2014-09-18 23:24:38
「成員明智的分配」在這裏不是一個選項。你提供了你自己的'operator ='。 (並且'T x = y;'不是任何賦值)。 – 2014-09-18 23:35:32
正在調用默認的構造函數,然後編譯器可以自由地刪除副本。不是很好! – 2014-09-18 23:37:00