講mutable前,先講一下const函式,講const函式前,先講一下函式前後加const的區別
一、c++函式前後加const的區別
1)函式前加const:普通函式或非靜態成員函式前均可加const修飾,表示函式的返回值為const,不可修改(主要是用於類的指標變數),格式為
const retuntype funcitonname(param list)
2)函式後加const:類的非靜態成員函式可加const修飾,函式為唯讀成員函式,成員變數為唯讀。
returntype functionname(param list) const
注:c++編譯器在實現const的成員函式時,為了確保該函式不能修改類的例項狀態,會在函式中新增乙個隱式的引數const this,
這樣類的成員變數的值,即成員變數為read only。
二、mutable關鍵字
mutable(易變的)是 c++ 中乙個不常用的關鍵字。只能用於類的非靜態和非常量資料成員。由於乙個物件的狀態由該物件的非靜態資料成員決定,
所以隨著資料成員的改變,物件的狀態也會隨之發生變化。如果乙個類的成員函式被宣告為 const 型別,表示該函式不會改變物件的狀態,也就是該
函式不會修改類的非靜態資料成員。但是有些時候需要在該類函式中對類的資料成員進行賦值,這個時候就需要用到 mutable 關鍵字,如:
#include
using namespace std;
class student
public:
student() {}
int setage(int age) const //錯誤:int age前面加mutable關鍵字修飾符即可以編譯通過
int setage(int age)
int getage() const
int getage()
private:
int age;
int main()
const student s1; //const物件
int age = s1.getage();//錯誤:const物件只能呼叫後const成員函式
student s2; //非const物件
age = s2.getage(); //呼叫const成員函式,正確
age = s2.getage();//呼叫非const成員函式,正確
return 0;
三、總結
1、後const成員函式中可以改變類的mutable型別的成員變數。
2、const物件只能呼叫後const成員函式。
3、非const物件既可以呼叫後const成員函式,又可以呼叫非const成員函式。
C 98智慧型指標auto ptr
大家不是一直吐槽c c 的指標都要程式設計師自己管理嘛,不用擔心啦 智慧型指標就可以解決這樣的問題 說是智慧型其實就是乙個模板類,宣告週期結束析構釋放 auto ptr 是c 98定義的智慧型指標模板,其定義了管理指標的物件,可以將new 獲得 直接或間接 的位址賦給這種物件。當物件過期時,其析構函...
C 98課的主要內容
今天主要學習了一下內容 1 asp.net 門戶 asp.net是。netframework的一部分,可提供用於建立動態web應用程式的類和工具。建立,編寫和部署asp.net web應用程式 1 asp,net 4和visual web developer中的新增功能 2 asp net 概述 3...
C 11與C 98的區別(更)
c 11與c 98的區別 本文參考了許多鄧凡平老師的blogc 11學習之路 這倆天學qt的時候發現遇到了 很多c 11的特性 於是決定點c 11與c 98的區別,不定時更新 1.空指標 nullptr 取代了之前的null 2.字串中加入了raw字串,定義形式為 r 附加定界符 字串 附加定界符 ...