const放在函數前后的區別


轉載: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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM