簡體   English   中英

返回語句將右值引用綁定到左值?

[英]return statement binding rvalue reference to an lvalue?

我從幾個方面得到了教育,在C ++ 11中,可以從包含命名局部變量的return語句中移動構造函數的返回值。 例如:

class A {};

A f() {
    A a;
    return a;
}

int main() {
    f();
}

也就是說,在C ++ 11中,由函數調用表達式f()指定的prvalue臨時值是從函數的局部變量a移動構造a ,而不是像C ++ 03中那樣由拷貝構造的。 當然,從語義上講,在進行任何級別的優化之前,復制省略,NRVO等都是如此。

我的問題是, A的move構造函數的參數類型為A&& ,它只能綁定到prvalue或xvalue,對嗎? 那么,哪一個特定的例外規則允許它綁定到左值a 謝謝。

哪一個特定的例外規則允許它綁定到左值?

那是12.8[class.copy]/32

當滿足或將要執行復制操作的省略標准時,除非源對象是函數參數,並且要復制的對象由左值指定,否則重載分辨率為復制選擇了構造函數首先執行,就好像該對象是由右值指定的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM