return 乙個臨時物件

2021-06-02 11:22:21 字數 594 閱讀 6514

如果函式返回值是乙個物件,要考慮return 語句的效率。例如

return string(s1 + s2);

這是臨時物件的語法,表示「建立乙個臨時物件並返回它」。不要以為它與「先建立

乙個區域性物件temp 並返回它的結果」是等價的,如

string temp(s1 + s2);

return temp;

實質不然,上述**將發生三件事。首先,temp 物件被建立,同時完成初始化;然

後拷貝建構函式把temp 拷貝到儲存返回值的外部儲存單元中;最後,temp 在函式結束

時被銷毀(呼叫析構函式)。然而「建立乙個臨時物件並返回它」的過程是不同的,編

譯器直接把臨時物件建立並初始化在外部儲存單元中,省去了拷貝和析構的化費,提高

了效率。

類似地,我們不要將

return int(x + y); // 建立乙個臨時變數並返回它

寫成int temp = x + y;

return temp;

由於內部資料型別如int,float,double 的變數不存在建構函式與析構函式,雖然該「臨

時變數的語法」不會提高多少效率,但是程式更加簡潔易讀。

乙個return的低階錯誤

之前在專案中寫了這樣乙個vb.net的方法,類似如下 function verifydate as boolean dim flag as boolean true dim a as integer 1 dim b as integer 3 dim c as integer 7 if b c the...

c 返回乙個物件 使用C 臨時物件的後果

但是!我就是想看看這麼做的糟糕後果是什麼!先要搞清楚什麼是臨時物件,這裡我參考 more effective c 99頁定義。真正的臨時物件是在原始碼中不可見的,是棧上的 沒有名字的物件。與函式內定義的臨時物件有根本差別。第一種 當觸發隱式型別轉換時 例如 統計ch在str 現的次數 size t ...

return 時遇到的乙個問題

今天做業務時遇到了乙個問題 我公司 上游公司 需要接收到 下游公司返回 return 的乙個字串 string string notify 我公司 上游公司 接收到的字串 業務 當我公司 上游公司 接收到下游返回的是 keyi 時,system.out.println 成功 否則,system.ou...