const修飾函式引數時的過載

2021-10-07 03:14:14 字數 1229 閱讀 7529

const修飾成員函式時的過載:根本原則是表示的引數是變數還是常量。

void fun(const int i)  

void fun(int i)

int main()

//結果:編譯錯誤,提示重定義:

其實很好理解:void fun(int a)和 void fun(const int a); 實際上沒有區別,因為函式呼叫的時候,存在實形結合的過程,所以不管有沒有const都不會改變實參的值。

但是看下面的情況:

void fun(char *a)  

void fun(const char *a)

int main()

//結果:通過編譯,且輸出結果為:

再來看乙個例子。

void fun(char *a)  

void fun(char * const a)

int main()

//結果:編譯不通過,提示重定義:

現在解釋原因:

第乙個例子中,我們說,fun(int i)和fun(const int i)是一樣的,是因為函式呼叫中存在實參和形參的結合。我們用的實參是int a,那麼這兩個函式都不會改變a的值,這兩個函式對於a來說是沒有任何區別的,所以不能通過編譯,提示重定義。

那 fun(char *a)和fun(const char *a)是一樣的嗎?答案是:不一樣。因為char *a 中a指向的是乙個字串變數,而const char *a指向的是乙個字串常量,所以當引數為字串常量時,呼叫第二個函式,而當函式是字串變數時,呼叫第乙個函式。

但是char *a和char * const a,這兩個都是指向字串變數,不同的是char *a是指標變數 而char *const a是指標常量,這就和int i和const int i的關係一樣了,所以也會提示重定義。

最後說一下,對於引用,比如int &i 和const int & i 也是可以過載的,原因是第乙個i引用的是乙個變數,而第二個i引用的是乙個常量,兩者是不一樣的,類似於上面的指向變數的指標的指向常量的指標。

下面是例子:

void fun(const int &i)  

void fun(int &i)

int main()

//結果為:通過

Const修飾函式

用const修飾函式的返回值 如果給以 指標傳遞 方式的函式返回值加const修飾,那麼函式返回值 即指標 的內容不能被修改,該返回值只能被賦給加const修飾的同型別指標。例如函式const char getstring void 如下語句將出現編譯錯誤 char str getstring 正確...

const修飾函式

include using namespace std class a a a intage void a printage const void a eat test.cpp 定義控制台應用程式的入口點。include stdafx.h include include a.h using name...

const修飾成員函式

1 常量限定修飾符,它把乙個物件轉換為常量 constant const物件必須初始化而且是在定義的同時。初始化後的const物件 或指標 是不能修改的。2 修飾成員函式 const類物件只能呼叫const成員函式,不能呼叫普通成員函式 const成員函式不能修改類的成員變數,若要修改則用mutab...