臨時變數 區域性變數,return的效率

2021-08-29 14:55:44 字數 580 閱讀 5846

如果函式返回值是乙個物件,要考慮 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 的變數不存在建構函式與析構函式, 雖然該 「臨時變數的語法」不會提高多少效率,但是程式更加簡潔易讀。

成員變數 區域性變數

成員變數 作為類的成員而存在,直接存在於類中。所有類的成員變 量可以通過this來引用。區域性變數 作為方法或語句塊的成員而存在,存在於方法的引數列表和方法定義中。1.成員變數可以被 public,protect,private,static等修飾符修飾,而 區域性變數不能被控制修飾符及 stati...

成員變數 區域性變數

一.相同點 1.都遵循變數的宣告格式 修飾符 資料型別 變數名 初始化值 2.都有各自的作用域 二.不同點 1.宣告的位置不同 成員變數 宣告在類內,方法外。區域性變數 宣告在方法內 方法的形參部分 塊內 2.成員變數的修飾符有四個 public private protected 預設 區域性變數...

返回區域性變數或臨時變數的位址 變數的儲存型別

按照變數的作用域 即從空間 角度分 可以分為全域性變數和區域性變數。按照變數的生存期 即從時間 角度分 可以分為靜態儲存方式和動態儲存方式。靜態儲存方式 是指在程式執行期間分配固定的儲存空間的方式。動態儲存方式 是在程式執行期間根據按需分配進行動態的分配儲存空間方式。使用者儲存空間可以分為程式區 靜...