靈活而奇特的C 語言特性 const(二)

2021-07-25 01:53:32 字數 1980 閱讀 1789

學習了博主的《漫談繼承技術》系列博文之後,相信大家都有所收穫吧!這次博主將和大家一起** 《靈活而奇特的c++語言特性》 ,主要包括引用、常量(const)、常量表示式(constexpr)、靜態(static)、外部(expert)、型別定義(typedef)、型別別名(aliases)、型別轉換、作用域解析、統一初始化、顯示轉換運算子、特性(attribute)、使用者自定義文字、標頭檔案、可變長度引數列表和預處理器巨集。儘管這個知識清單顯得有點凌亂,但是這些話題都是博主經過精心挑選,是容易混淆的語言特性。本篇我們來學習一下const,增進大家對《靈活而奇特的c++語言特性》的理解。 

const是constant的縮寫,指保持不變的量。編譯器會執行這一要求,任何嘗試改變常量的行為都會當作錯誤處理。此外,當啟用了優化時,編譯器可以利用此資訊生成更好的**。關鍵字const主要有兩種相關的用法。可以用這個關鍵字標記變數或者引數,也可以用const標記方法。本篇博文主要**const方法的含義,希望對大家有一點幫助。

對於類成員方法可以用const來修飾,在該方法中不允許修改類的非mutable資料成員。在類的const成員方法中不允許呼叫類的非const成員方法,但是非const成員方法可以呼叫類的const成員方法。類的非const物件、指標或引用在類外可以呼叫類的所有public方法,但是類的const物件、指標或引用在類外只能呼叫類的const修飾的public方法。其實,const修飾的是this指標,所有不存在const修飾的全域性函式。咱們來舉個栗子吧。

#include

using

namespacestd;

class

super

voidsetnvalue(int nvalue = 0) const;

voidsetcvalue(char cvalue = ' ');

chargetcvalue();

voidprintvalue() const;

//staticvoid fun() const;

private:

mutable

intm_nvalue;

charm_cvalue; };

super::super(int

nvalue

/*=0*/, char

cvalue

/*=' '*/)

:m_nvalue(nvalue), m_cvalue(cvalue)

void

super::setnvalue(int

nvalue

/*=0*/) const

void

super::setcvalue(char

cvalue

/*=' '*/)

char

super::getcvalue()

void

super::printvalue()const

/*void fun() const*/

int main(int

argc,char**argv)

程式執行結果:

如果將上例中的注釋解除,將會報以下系列錯誤:

靈活而奇特的C 語言特性 引用(上)

學習了博主的 漫談繼承技術 系列博文之後,相信大家都有所收穫吧!這次博主將和大家一起 靈活而奇特的c 語言特性 主要包括引用 常量 const 常量表示式 constexpr 靜態 static 外部 expert 型別定義 typedef 型別別名 aliases 型別轉換 作用域解析 統一初始化...

靈活而奇特的C 語言特性 const(一)

學習了博主的 漫談繼承技術 系列博文之後,相信大家都有所收穫吧!這次博主將和大家一起 靈活而奇特的c 語言特性 主要包括引用 常量 const 常量表示式 constexpr 靜態 static 外部 expert 型別定義 typedef 型別別名 aliases 型別轉換 作用域解析 統一初始化...

靈活而奇特的C 語言特性 作用域解析(二)

學習了博主的 漫談繼承技術 系列博文之後,相信大家都有所收穫吧!這次博主將和大家一起 靈活而奇特的c 語言特性 主要包括引用 常量 const 常量表示式 constexpr 靜態 static 外部 expert 型別定義 typedef 型別別名 aliases 型別轉換 作用域解析 統一初始化...