C const與函式過載

2021-10-08 03:10:50 字數 1310 閱讀 8181

const 修飾函式有三種:

constt foo::bar(constt )const;

1. 修飾函式返回值

函式返回值不能作為區分函式過載的因素

2. 修飾函式引數

如:

void

foo(

int)

;void

foo(

const

int)

;

如果以上這兩個函式是在乙個作用域內,函式過載失敗,編譯報錯。

既,const修飾 函式引數一般不作為區分過載的因素。

但有例外:const修飾的函式引數是指標引用時,可以過載,如:

void

foo(

char*)

;// 1

void

foo(

const

char*)

;//2

void

foo(

char&)

;// 3

void

foo(

const

char&)

;// 4

//...

char str=

"hello"

;const

char cstr=

"world"

;foo

( str )

;// call #1 foo

foo( cstr )

;// call #2 foo

以上例外const必須修飾的是指標指向的內容, 既ponter-to-const;

如果是指標本身是const的,則不能過載, 如:

void

foo(

int*);

void

foo(

int*

const);

// compile error

3. 修飾類的成員函式

如:

classa;

//...

a a;

const a ca;

a.foo()

;// call #1

ca.foo()

;// call #2

類的成員函式隱含會傳遞this指標; 而const成員函式則傳遞const this指標。呼叫哪乙個取決於類的物件是否是const的。

ref:

c const指標與函式呼叫

在我的部落格中,已經討論了動態繫結和靜態繫結,以及在預設引數情況下虛函式的繫結情況。一般情況下,我們 是用非const的基類指標指向派生類物件,如果通過該指標呼叫虛函式則發生的動態繫結,如果我們定義乙個const指標,指向派生類的物件,如果派生類裡定義了同名的虛函式和 const函式,會發生什麼呼叫...

c const成員函式

一些成員函式改變物件,一些成員函式不改變物件。例如 int point gety 這個函式被呼叫時,不改變point物件,而下面的函式改變point物件 void point setpt int x,int y 為了使成員函式的意義更加清楚,我們可在不改變物件的成員函式的函式原型中加上const說明...

C const成員函式

原文 我們知道,在c 中,若乙個變數宣告為const型別,則試圖修改該變數的值的操作都被視編譯錯誤。例如,const char blank blank n 錯誤物件導向程式設計中,為了體現封裝性,通常不允許直接修改類物件的資料成員。若要修改類物件,應呼叫公有成員函式來完成。為了保證const物件的常...