如果函式的返回值是乙個物件,有些場合用「引用傳遞」替換「值傳遞」可以提高效率。而有些場合只能用「值傳遞」而不能用「引用傳遞」,否則會出錯。
例如:
class string
string的賦值函式operate = 的實現如下:
string & string::operate=(const string &other)
對於賦值函式,應當用「引用傳遞」的方式返回string物件。如果用「值傳遞」的方式,雖然功能仍然正確,但由於return語句要把 *this 拷貝到儲存返回值的外部儲存單元之中,增加了不必要的開銷,降低了賦值函式的效率。例如:
string a,b,c;
… a = b; // 如果用「值傳遞」 ,將產生一次 *this 拷貝
a = b = c; // 如果用「值傳遞」,將產生兩次 *this 拷貝
string的相加函式operate + 的實現如下:
string string::operate+(const string &s1,const string &s2)
對於相加函式,應當用「值傳遞」的方式返回string物件。如果改用「引用傳遞」,那麼函式返回值是乙個指向區域性物件temp的「引用」。由 於temp在函式結束時被自動銷毀,將導致返回的「引用」無效。例如:
c = a + b;
此時 a + b 並不返回期望值,c 什麼也得不到,流下了隱患。
引用傳遞與值傳遞
看 define n 10000 define n 10000 ini set memory limit 1g function microtime float function printarray0 arr 引用傳遞 function printarray1 arr 值傳遞 for i 0 i ...
值傳遞與引用傳遞
分析 形參是實參的拷貝,改變形參的值並不會影響外部實參的值。由於x 1 是在test方法棧裡面執行的,所以只會改變test方法棧裡面的x值,而不會改變main方法棧裡面的x值 形參的改變不會影響實參 引用傳遞,傳遞的是實際引數的位址.傳遞的是值的引用,也就是說傳遞前和傳遞後都指向同乙個引用 同乙個記...
值傳遞與引用傳遞
值傳遞,只是傳遞副本,而引用傳遞,是傳遞乙個位址 using system using system.collections.generic using system.linq using system.text v console.writeline 引用傳遞,結果為!r static void ...