如果函式返回值是乙個物件,要考慮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...