簡體   English   中英

返回表達式是否被視為 c++ 中的臨時 object?

[英]Is the return expression treated as a temporary object in c++?

class elem
{
public:
    elem()
    {
    }
    elem(elem &)
    {
    cout << 222222 << endl;
    }  
    elem(elem &&)
    {
    cout << 111111 << endl;
    }
};

elem fun()
{
    elem e;

    elem f(e);

    return e;
}

void main()
{
    fun();
}

Output:

22222

11111

我的困惑:

當我在fun返回一個左值時,為什么fun不調用復制構造函數而是移動構造函數? 'e' 什么時候在返回表達式中變為右值?

注意:我已經關閉了復制省略。

如果您在 function 中聲明一個局部變量並將其從 function 中返回,則它是一個右值。 還有一條綁定規則說……“移動構造函數中的右值引用優於復制構造函數中的 const 左值引用——這些是將表達式值綁定到引用的規則。 如果移動構造函數不可用,則選擇第二個首選項 - 復制構造函數”。 正如@Olef 的評論,另請參見Automatic move from local variables and parameters

暫無
暫無

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

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