Const 過載解析

2022-06-06 18:51:10 字數 800 閱讀 4170

1. const過載應用場景

首先,對於函式值傳遞的情況,因為引數傳遞是通過複製實參建立乙個臨時變數傳遞進函式的,函式內只能改變臨時變數,但無法改變實參。則這個時候無論加不加const對實參不會產生任何影響。但是在引用或指標傳遞函式呼叫中,因為傳進去的是乙個引用或指標,這樣函式內部可以改變引用或指標所指向的變數,這時const 才是實實在在地保護了實參所指向的變數。因為在編譯階段編譯器對呼叫函式的選擇是根據實參進行的,所以,只有引用傳遞和指標傳遞可以用是否加const來過載。

例如:

1

intmain() 2

1011

intmain()

12

2. const成員函式的過載

const 成員函式過載的解析和const引數過載解析的原理可以說是一樣的。之所以這樣說是因為const成員函式的解析可被看做是對函式this引數用const來修飾的過程

例如:

class a;  

int main()

3. 總結

(1) const過載主要是通過能否對傳入的引數進行修改為判斷的。

(2) const引數過載和const函式過載機制都是一樣的,因為對於const 函式過載可看做是對隱含的指標this的引數過載。對於非成員函式,因為沒有this指標,不能根據const過載。

(3) 過載是在編譯階段已經完成,對於彙編和鏈結來說透明的。

(4) 建構函式可以過載,但是不可以宣告成const函式(需要初始化成員變數); 析構函式不傳入引數也不返回值,因此不能過載。

const 和 非const函式過載

在下面的 中a1呼叫const版本,a2呼叫非const版本。const a a1 a a2 a1.x a2.x 後面加const表示在該函式中不能對類的資料成員進行改變,比如 class a 這可以 int x const 當然有特殊情況,就是用mutable關鍵字修飾過的成員變數可以在宣告為co...

函式過載之const

我們知道,如果函式名相同,在相同的作用域內,其引數型別 引數個數,引數順序不同等能構成函式過載。有趣的是如果同時在類中,對於函式名相同的const函式和非const函式能夠構成過載,同時它們被呼叫的時機為 如果定義的物件是常物件,則呼叫的是const成員函式,如果定義的物件是非常物件,則呼叫過載的非...

const 成員函式過載

先看一段引用 1 許多人漠視一件事實 兩個成員函式如果只是常量性 constess 不同,可以被過載 ok,下面為了解釋,定義一下下面這個類 class cstring const char operator size t i const 注意這個const 常量,屬於函式簽名,因此導致過載 然後有...