我已經從幾個來源受到教育,在C++ 11中,函數的返回值可以從由命名局部變量組成的返回語句移動構建。例如:返回語句綁定rvalue引用左值?
class A {};
A f() {
A a;
return a;
}
int main() {
f();
}
即,在C++ 11中,prvalue臨時通過函數調用表達式f()
指定距離函數的局部變量a
布展構造,而不是拷貝構造如在C++中03。當然,從語義上講,在進行任何級別的優化之前,複製elision,NRVO等。
我的問題是,A
的移動構造函數的參數是A&&
,它只能綁定到一個prvalue還是xvalue,對嗎?那麼哪個特定的例外規則允許它在這裏綁定到左值a
?謝謝。
您是否加入了此代碼?我懷疑它是否符合你的想法。對於你沒有捕獲f()的返回值。 – Dan
@丹:是的,我試過了,它是被調用的移動構造函數,而不是複製構造函數。您可以通過明確定義公共副本構造函數和私有移動構造函數來嘗試自己。它將無法編譯。 – goodbyeera