今天生病了,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中測試了一下什麼樣的儲存方式是合法的,什麼樣的儲存方式是非法的。為了防止編譯器優化影響結果,我在被呼叫的函式中使用了標準輸入...