函式返回值的情況

2021-07-04 10:12:47 字數 1220 閱讀 9127

在乙個函式的內部,

return

的時候返回的都是乙個拷貝,不管是變數、物件還是指標都是返回拷貝,但是這個拷貝是淺拷貝。

1.     

如果返回乙個基本型別的變數,比如:

int a;

a = 5;

return a;

那麼就會

a的乙個拷貝,即

5返回,然後

a就被銷毀了。儘管

a被銷毀了,但它的副本

5還是成功地返回了,所以這樣做沒有問題。

2.     

但是對於非動態分配

(new/malloc)

得到的指標,像

1那麼做就會有問題,比如在某個函式內部:

int a = ;

return a;

那麼也會返回指標

a的乙個拷貝,我們假定

a的位址值為

0x002345fc

,那麼這個

0x2345fc

是能夠成功返回的。當

return

執行完成後,

a就要被銷毀,也就是

0x002345fc

所指向的記憶體被**了。如果這時候在函式外面,去位址

0x002345fc

取值,那得到的結果肯定是不對的。這就是為什麼不能返回區域性指標的原因。返回區域性變數的引用的道理和這個類似。

3.     

對於返回

(動態分配得到的

)指標的另外一種情況,比如在函式內部:

int a = new int(5);

return a;

這樣做是可以的。

return a

執行完後,

a並沒有被銷毀

(必須要用

delete

才能銷毀

a),所以這裡返回的

a是有效的。

4.     

如果不是基本資料型別,比如:

class a ;

如果在某個函式內部有乙個

a類的區域性變數,比如:

a a;

return a;

這時候也會返回

a的乙個拷貝,如果

a沒有寫深拷貝建構函式,就會呼叫預設的拷貝建構函式

(淺拷貝

),這樣做就會失敗的; 如果

a中提供了深拷貝建構函式,則這樣做就是可以的。

函式返回值的幾種情況

在乙個函式的內部,return 的時候返回的都是乙個拷貝,不管是變數 物件還是指標都是返回拷貝,但是這個拷貝是淺拷貝。1.如果返回乙個基本型別的變數,比如 int a a 5 return a 那麼就會 a的乙個拷貝,即 5返回,然後 a就被銷毀了。儘管 a被銷毀了,但它的副本 5還是成功地返回了,...

關於函式返回值的幾種情況

在乙個函式的內部,return 的時候返回的都是乙個拷貝,不管是變數 物件還是指標都是返回拷貝,但是這個拷貝是淺拷貝。1.如果返回乙個基本型別的變數,比如 int a a 5 return a 那麼就會 a的乙個拷貝,即 5返回,然後 a就被銷毀了。儘管 a被銷毀了,但它的副本 5還是成功地返回了,...

關於函式返回值的幾種情況

在乙個函式的內部,return的時候返回的都是乙個拷貝,不管是變數 物件還是指標都是返回拷貝,但是這個拷貝是淺拷貝。1.如果返回乙個基本型別的變數,比如 int a a 5 return a 那麼就會 a的乙個拷貝,即 5返回,然後 a就被銷毀了。儘管 a被銷毀了,但它的副本 5還是成功地返回了,所...