轉載:const放在函數前后的區別
一、const修飾指針
int b = 500;
1、const int * a = & b;
2、int const * a = & b;
3、int * const a = & b;
4、const int * const a = & b;
對於1和2
const 放在*左側,就是用來修飾指針所指向的變量,即指針指向的是常量。
若a是倉庫管理員,b是倉庫。即倉庫中的貨物(*a)不允許改變。但是可修改指針指向或b的值來改變*a。
對於3
const放在*的右側,表示管理的倉庫不可改變,只能是那一個,但是倉庫中的貨物(*a)可以改變。同時定義時必須初始化。
對於4
表示指針本身和指向的內容均為常量。
二、放在函數前后區別
1、int GetY() const;
2、const int * GetPosition();
對於1
該函數為只讀函數,不允許修改其中的數據成員的值。
對於2
修飾的是返回值,表示返回的是指針所指向值是常量。
三、深入理解const
const對象只能調用const成員函數;const對象的值不能被修改,在const成員函數中修改const對象數據成員的值是語法錯誤;在const函數中調用非const成員函數是語法錯誤。
在一個類的函數后面加上const后,就表明這個函數是不能改變類的成員變量。如果在編寫const成員函數時,不慎修改了數據成員,或者調用了其它非const成員函數,編譯器將指出錯誤,這無疑會提高程序的健壯性。
以下程序中,類stack的成員函數GetCount僅用於計數,從邏輯上講GetCount應當為const函數。編譯器將指出GetCount函數中的錯誤。
class Stack
{
public:
void Push(int elem);
int Pop(void);
int GetCount(void) const; // const成員函數
private:
int m_num;
int m_data[100];
};
int Stack::GetCount(void) const
{
++ m_num; // 編譯錯誤,企圖修改數據成員m_num
Pop(); // 編譯錯誤,企圖調用非const函數
return m_num;
}
const成員函數的聲明看起來怪怪的:const關鍵字只能放在函數聲明的尾部,大概是因為其它地方都已經被占用了。
--------------------- 本文來自 ranyongqing 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/ranyongqing/article/details/25594795?utm_source=copy
————————————————
版權聲明:本文為CSDN博主「wangtingze123」的原創文章,遵循CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/wangtingze123/article/details/82867173