1. 程式人生 > >c++中的const函數

c++中的const函數

blank tex 行修改 t對象 編程風格 ont strong 關鍵字 bsp

在C++中,只有被聲明為const的成員函數才能被一個const類對象調用。

要聲明一個const類型的類成員函數,只需要在成員函數參數列表後加上關鍵字const,例如,

class Screen {  
public:  
   char get() const;  
};  

在類體之外定義const成員函數時,還必須加上const關鍵字,例如  

char Screen::get() const {  
   return _screen[_cursor];  
}  

   若將成員成員函數聲明為const,則該函數不允許修改類的數據成員。例如,

class Screen {  
public:
    int a;
public:  
 Screen()
{
    a=0;
}
void ok() const 
{
    a=1;//錯誤
 }  

};  

 下面的這個例子比較經典:

int a=0;
const int *p=&a;//把一個可以修改的變成不可以修改的----正確


const int b=100;
int *p=&b; //把一個不可以修改的變成可以修改了----錯誤

總結:

1.const成員函數可訪問const成員變量和普通成員變量,但不能修改任何變量。檢查發生在編譯時。

 普通函數可訪問const成員變量,不可以修改。.(在訪問的時候會自動轉成const的)

(成員函數和變量之間都是可訪問不可以修改)

2.const對象只能訪問const成員函數,

(const對象只可訪問const的,也只可以被const的訪問)

3.const對象的成員變量不可以修改。

4.const成員函數不能調用非const成員函數,因為非const成員函數可以會修改成員變量

5.普通成員函數可以訪問非const對象的普通數據成員、const數據成員,但不可以訪問const對象的任意數據成員。(除了此點外,普通的都可以訪問const的)

6.const成員函數只是用於非靜態成員函數,不能用於靜態成員函數。

7.const成員函數的const修飾不僅在函數聲明中要加(包括內聯函數),在類外定義出也要加。

8.作為一種良好的編程風格,在聲明一個成員函數時,若該成員函數並不對數據成員進行修改操作,應盡可能將該成員函數聲明為const 成員函數。

參考資料:

https://www.cnblogs.com/shenckicc/p/6847103.html

https://www.cnblogs.com/myseasky/p/7458064.html

c++中的const函數