0
從this文章表示爲什麼返回值優化發生在這裏
當一個無名臨時的,不會綁定到任何引用,將被移動 或複製到相同的CV-不合格類型的對象時, 複製/移動被省略。當臨時建造時,它是直接在存儲中構建的 ,否則它將被移動 或複製到。當無名暫時是聲明返回的參數時,這種副本刪除的變體稱爲RVO,「返回值 優化」。
所以爲了測試這個概念我嘗試了以下實驗
class C
{
public:
C()
{
std::cout << "Constructor of C." << std::endl;
}
C(const C &)
{
std::cout << "Copy-constructor of C." << std::endl;
}
};
C func()
{
const C c;
return c; //c is not a nameless and is not CV unqualified as it is a const type.
}
int main(int argc, char **argv)
{
C c = func();
}
輸出:章C
Constrcutor我期待: 的構造ç 拷貝構造的Ç C的複製構造函數
我的問題是爲什麼返回值優化發生在這裏?
這仍然不能回答它。返回類型是一個常量,所以它不是cv不合格的,並且返回類型也不是臨時的。它在函數中創建並返回。 – MistyD 2014-11-24 04:57:07
@MistyD:返回類型不是常量。你要返回的對象是。但無論如何,這是無關緊要的。該文本並不是說它需要cv不合格。它表示返回的對象的類型(除去了cv限定符)需要與該函數的返回類型相同(刪除了cv限定符)。 – 2014-11-24 05:06:59