2017-03-07 98 views
0

我讀的書內C++對象模型,我得到了下面的事情:
enter image description here爲什麼不NRVO沒有拷貝構造函數工作

據我所知,NRVO不會調用拷貝構造函數函數返回的類。所以我不明白爲什麼「由於沒有複製構造函數,程序的第一個版本不適用NRV優化...」。

+0

因爲標準是這樣說的。它將在C++ 17中修復。 – nwp

+0

@nwp RVO是強制性的,但不是NRVO,對吧? – TartanLlama

+0

@nwp因此,對於活動的NRVO,拷貝構造函數必須存在,即使它從未被調用過? – Yves

回答

0

的想法是,該代碼都應該對執行優化的編譯器,併爲那些不工作。如果對象被複制,顯然複製構造函數必須被定義和訪問。所以這就是要求,即使對那些可能並不總是使用它的編譯器也是如此。

就像在評論中說,C++ 17將會使優化強制性然後可以放鬆要求。