C 中函式返回值的設計

2021-04-12 15:38:46 字數 1237 閱讀 4313

今天生病了,23歲的第一天居然發燒了,坐在辦公室也不想幹什麼活了.正好昨天同事問了我乙個關於函式返回值得問題,所以趁著會沒事將我對函式返回值的設計的理解記下來. 

在c++中,函式的返回值大概分為這麼三種:

1、內建型別,類型別,結構體等等。

2、指標。

3、引用。

對於第一種,大家都很熟悉。在c++中是按值傳遞各種引數,返回值的,所以,第一種很好理解,也一般不會出什麼大問題。但是第一種返回值得乙個比較大的缺點就是如果返回值比較大的話,函式的效能會受到一定的影響。所以會採用第

二、三種方法。

函式返回乙個指標的大概原理相比大家也都清楚,他的優點就是避免了大量資料的拷貝。但是他也有乙個缺點,就是在過載乙個操作符的時候,引起了操作的不便。比如說有乙個型別type,我們為他過載了+操作符,返回乙個指標型別的變數:

......

type* type::operator + (cosnt type elem);

......

那麼當我們執行表示式t1 + t2;的時候,返回的是乙個指標型別的變數type*,這樣的話,如果我們想進行一連串的加法操作會變得及其彆扭:

*(t1 + t2) + t3;

如上所示,在(t1 + t2)前面我們不得不加上解引用操作符,這明顯不符合我們的習慣。

據說,就在這個時候,人們為此特意設計了引用型別這麼乙個尤物。這樣的話我們可以改寫操作苻過載為:

......

type& type::operator + (const type &elem);

......

這樣一來我們就可以按照我們通常的習慣進行一連串的加法操作了:

t1 + t2 + t3;

而通常我們不允許外部呼叫函式修改我們的返回值,所以我們可以把返回型別設計成常量:

......

const type& type::operator + (const type &elem);

......

說到這裡,不得不開始說引用毛病了。因為引用型別實際儲存的變數的位址,所以我們在寫乙個返回型別為引用型別的函式時免不了犯這個毛病,就是返回乙個區域性變數的引用:

......

const type& type::operator + (const type &elem)

......

這樣的話,當這個函式結束時,區域性變數t也隨著銷毀了,於是返回的引用值所指向的是一塊無效的位址了.錯誤由此誕生了.

總結一下,各種返回型別個有利弊,大家使用時要酌情考慮~~~

C 函式返回值。

一 params.可變引數,無論有幾個引數,必須出現在引數列表的最後,可以為可變引數直接傳遞乙個對應型別的陣列。class program test msg intarry static void test string msg,params int args 二 ref 引用傳遞 三 out ou...

函式中的返回值

function fn n,m fn 代表函式本身 fn 10,20 實參 給形參傳遞的具體值 代表函式執行後返回的結果,函式執行的時候,都會形成乙個全新的私有作用域 私有棧記憶體 把原有堆記憶體中儲存的字串中變為js 表示式執行 保護裡面的私有變數不受外界的干擾 和外界是隔離的 我們吧函式執行的這...

C 中函式返回值的儲存

在c 中,可以使用多種方式返回乙個變數 物件 比如直接返回乙個臨時物件 返回其引用 返回其指標。配合不同的修飾符,又可能產生不同的效果。下面我在visualstudio2013中測試了一下什麼樣的儲存方式是合法的,什麼樣的儲存方式是非法的。為了防止編譯器優化影響結果,我在被呼叫的函式中使用了標準輸入...