函式形參為什麼使用const引用 常引用

2021-08-04 16:56:40 字數 1831 閱讀 5814

&是為了引用傳遞,防止值傳遞的複製資料,

const

是為了保護資料不被改動。

const&防止傳值時拷貝建構函式的呼叫開銷

2、形參的物件為頂層

const

時,傳入的實參既可以是

const

值,又可以是非

const

值,若是底層

const

,傳入的實參只能是

const

的值。頂層 const表示的是指標本身是乙個常量, 底層

const

表示的是指標所指的物件是乙個常量。

const int a;//頂層

const

const int *a;//底層

const

int * const a;//頂層

const

const int &a;//底層

const

更一般情況下,

頂層const可以表示任意物件是乙個常量,這對於算術型別、類、指標等任何資料型別都是成立的,

底層 const則與指標和引用等復合型別的基本型別部分有關,

比較特殊的是,指標既可以是頂層 const也可以是底層

const

,這一點與其他型別區別明顯。

2. 頂層

const

與底層

const

在執行拷貝操作時的不同

對於頂層 const與底層

const

,在執行物件拷貝時有著明顯的不同:

(1)頂層

const

不受什麼影響

int i = 0;  

const int ci = 42;       // 不能改變

ci 的值,這是乙個頂層

const  

i = ci;                        // 正確:

ci 是乙個頂層

const

,對此操作無影響  

const int *p2 = &ci;  // 允許改變

p2 的值,這是乙個底層

const  

const int *const p3 = p2;  // 靠右的

const

是頂層const

,靠左的是底層

const  

p2 = p3;                  // 正確:

p2 和

p3 指向的物件的型別相同,

p3頂層

const

的部分不影響

(2)底層

cons

的限制不能忽略

要求拷出和拷入的物件有相同的底層 const資格或者能轉換為相同的資料型別,一般非常量能夠向常量轉換,反之則不行

int *p = p3;           // 錯誤:

p3 包括底層

const

定義,而

p 沒有  

p2 = p3;                // 正確:

p2 和

p3 都是底層

const  

p2 = &i;                 // 正確:

int*

能轉換成

const int*  

int &r = ci;  // 錯誤:普通的

int&

不能繫結到

int

常量上  

const int &r2 = i;   // 正確:

const int&

可以繫結到乙個普通

int

上  

c 複製建構函式形參為什麼是const引用

使用反證法即可證明。如果使用值傳遞形式構造類的複製建構函式,在使用a初始化t時,呼叫複製建構函式。該函式為值傳遞形參,需要對a進行複製操作,又會呼叫複製建構函式,而複製建構函式是值傳遞,又需要進行複製操作 無限迴圈下去。顯然值傳遞是不可行的,解決辦法就是採用引用傳遞。class base base ...

函式形參 指標,引用,const,陣列形參

指標也是物件,也會拷貝,所以分實參指標和形參指標。在傳進函式時,實參進行拷貝,所以在函式裡改變指標值不影響實參。void reset int ip 引用不是物件,通過引用可以改變實參 void reset int i 使用引用的好處是避免了拷貝。其實也只是兩個變數名的傳遞,和變數規則一致,如果在函式...

函式形參中的const引用

這裡將c primer中函式形參章節有關const和引用的問題簡單小結如下 一 非const非引用形參 這個是乙個平庸的情形。函式引數通過複製對應的實參實現初始化,函式本身對形參的修改不會影響到實參。傳遞給這類函式的實參可以是乙個const型的物件,也可以是非const的物件。乙個需要注意的事情是,...