const 修飾函式有三種:
const
t foo::bar(const
t )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物件的常...