這裡將c++ primer中函式形參章節有關const和引用的問題簡單小結如下:
一、非const非引用形參
這個是乙個平庸的情形。函式引數通過複製對應的實參實現初始化,函式本身對形參的修改不會影響到實參。傳遞給這類函式的實參可以是乙個const型的物件,也可以是非const的物件。
乙個需要注意的事情是,有乙個較為特殊的例子是指標形參,也就是形參是指標。這類函式的定義形式是:
int fnexample(int *ivalue)
同一般的非const非引用情形一樣,函式不會修改傳遞給它的實參(指標),但是,對指標的區域性修改將會改變指標所指向的值。如果需要保護指標所指向的值,我們必須將形參定義為指向const物件的指標 :
int fnexample(const int *ivalue)
此時我們仍然可以傳遞乙個int*型實參給函式,而並不一定需要傳遞const int*型實參。
二、非引用const型形參
int fnexample(const int ivalue)
這種情形事實上與剛剛討論的指向const物件的指標形參是一致的,我們不可以改變實參的區域性副本,但我們既可以傳遞給函式const物件,也可以傳遞非const物件。
三、複製實參的侷限性
以下幾種情形不適宜複製形參,此時需要將形參定義為引用或者指標型別:
1.需要修改實參的值
2.複製物件時間或空間代價過大
3.沒有辦法複製實參
四、const引用形參
前面提到,對於複製類型別或者大型陣列,非引用形參效率太低。此時我們需要將形參定義為引用型別,但如果我們僅僅希望避免複製,而不是為了要改變實參,那麼我們應該把形參定義為const引用:
int fnexample(const int &ivalue)
五、非const引用形參
如果函式沒必要修改實參,而僅僅是避免複製,則應該使用const引用,非const引用毫無必要地限制了函式的使用。如果函式具有普通的非const引用形參,則必須給函式傳遞型別完全一致的非const物件。給這類函式傳遞乙個字面值、乙個表示式、或者乙個需要進行型別轉換的物件都是不允許的
int fnexample(int &ivalue)
函式形參 指標,引用,const,陣列形參
指標也是物件,也會拷貝,所以分實參指標和形參指標。在傳進函式時,實參進行拷貝,所以在函式裡改變指標值不影響實參。void reset int ip 引用不是物件,通過引用可以改變實參 void reset int i 使用引用的好處是避免了拷貝。其實也只是兩個變數名的傳遞,和變數規則一致,如果在函式...
const引用形參的意義
如const int ival 首先如果它只是const非引用形參那麼實參是否為const對它沒有影響,因為只是傳遞副本。而當它為非const引用形參,那麼它是實參的別名,對它的修改也就是對實參本身的修改,而當它為const 引用形參 那麼將會修改實參的值 而他本身不會修改?那麼引用是實參的別名而後...
函式形參為什麼使用const引用 常引用
是為了引用傳遞,防止值傳遞的複製資料,const 是為了保護資料不被改動。const 防止傳值時拷貝建構函式的呼叫開銷 2 形參的物件為頂層 const 時,傳入的實參既可以是 const 值,又可以是非 const 值,若是底層 const 傳入的實參只能是 const 的值。頂層 const表示...