返回值優化——《C++ Primer Plus》

通過傳值方式返回創建的新對象時,使用一種特殊的語法.

例如在operator+中:return Integer(left.i + right.i);

這種形式看起來像是一個構造函數的調用,這稱爲臨時對象語法,含義是創建一個臨時的Integer對象並返回它。

這種方式和創建一個有名字的對象並返回它是否相同呢?

例如:Integer temp(left.i + right.i); return temp;
這兩條語句先創建temp對象,會調用構造函數。然後拷貝構造函數把temp拷貝到外部返回值的存儲單元,最後在temp作用域的結尾時調用析構函數。

返回臨時對象的方式不同與此:

當編譯器看到這種語法時,會明白創建這個對象的目的只是返回它,所以編譯器直接把這個對象創建在外部返回值的存儲單元中,所以只需要調用一次構造函數,不需要拷貝構造函數和析構函數的調用。因此,使用臨時對象語法的效率非常高,這被稱爲返回值優化

發佈了159 篇原創文章 · 獲贊 36 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章