C 高階學習 const常成員

2021-10-04 06:17:03 字數 3232 閱讀 9193

const修飾指標

const用於函式的形參

const關鍵字在c++中的應用

const修飾物件

關鍵字 mutable

常型別是指使用型別修飾符const說明的型別,常型別的變數或物件的值是不能被修改的

const的普通用法
int

const index =10;

//const修飾的變數不能被修改,且必須初始化

const

int index =

10;

初始化和賦值
/****初始化****/

int temp =10;

//定義變數的同時初始化

/****賦值****/

int temp;

temp =10;

//給變數賦值

這個在c語言的基本資料型別裡面有說過

const修飾指標

常量指標

const修飾 *p

int

const

*p;//const修飾 *p

const

int* p;

//常量指標 不能通過指標修改p指向的內容(不能修改指向的內容)

指標常量
const 修飾 p

int temp =10;

int*

const p =

&temp;

//指標常量 不能修改p的指向 且必須初始化

const用於函式的形參
void

fun(

const

int*p)

;

const用於形參時說明了形參在函式內部不會被改變

const修飾成員變數

class test

};

常成員變數必須使用初始化列表初始化

const修飾成員函式

類成員函式形參表之後,函式體之前加上const,這樣的函式成為常函式

class test

void

show()

const

};

const修飾的是什麼?

在c語言裡面const是用來修飾變數的,那麼在c++裡面const是用來修飾什麼,在c++中const實際修飾的是this指標,上面的**在編譯器看來是這個樣子的

class test

void

show

(/*const test* const this*/

)const

//修飾this

};

const修飾成員函式構成過載?

是的沒錯,構成過載,原因是形參不同,構成過載

函式原型相同的成員函式,常版本和非常版本構成過載

class test

void

show

(/*test* const this*/

)//過載

void

show

(/*const test* const this*/

)const

};

const成員函式的呼叫問題
常成員函式不能呼叫非常成員函式,非常成員函式可以呼叫常成員函式,如果有過載版本的非常函式,優先呼叫非常函式

#include

using namespace std;

class test

/***非常成員函式可以呼叫常成員函式,如果有過載版本的非常函式,優先呼叫非常函式***/

void

show

(/*test* const this*/

)/***********常成員函式不能呼叫非常成員函式***********/

void

show

(/*const test* const this*/

)const

void

fun(

/*test* const this*/

)void

foo(

)const};

intmain()

列印結果:

資產:1000

funconst

:fun

常成員函式不能呼叫非常成員函式的原因:

是因為this指標的修飾符不同,在const成員函式裡面的this指標被const修飾,在const成員函式裡面呼叫非const成員函式時,相當於將const修飾的this指標傳給非const成員函式。

非常成員函式可以呼叫常成員函式的原因:

這個涉及到編譯器的原理:提高許可權不安全,縮小許可權是安全的

這個許可權怎麼理解:

/***********非常成員函式***********/

void

show()

/***********常成員函式***********/

void

show()

const

void

fun(

)void

foo(

)const

this可讀寫代表可以訪問和修改this裡面的成員變數的值

this可讀代表可以訪問this裡面的成員變數的值

非常成員函式可以呼叫常成員函式,如果有過載版本的非常函式,優先呼叫非常函式

這個從許可權來講,編譯器堅定不移的執行了不背鍋精神,編譯器認為縮小許可權是安全的,擴大許可權是危險的,編譯器會優先選擇最合適的

const修飾物件

被const修飾的物件 意味著物件中的成員資料不可以改內容

原理和const修飾成員函式的原理是一樣的,理解了const修飾成員函式 這一部分,那麼const修飾物件也很容易理解

關鍵字 mutable

在c++裡面有個在常成員函式中開vip的存在,這就是mutable

mutable int m_money;

//mutable修飾的變數可以在常成員函式中修改

C 關於const的常物件成員和常成員函式

首先const修飾變數時初始化不能用我們平常的方式初始化 也就是下面這種方式是不正確的 class coordiante private const int m ix const int m iy 我們初始化乙個const修飾的變數只能用初始化列表的方式進行 class coordiante pri...

C 學習之 常成員函式

功能 常成員函式試驗 介紹 使用const關鍵字說明的成員函式,稱為常成員函式 只有常成員函式才有資格操作常量或常物件 沒有使用const關鍵字說明的成員函式不能用來 操作常物件 常成員函式說明格式如下 引數說明符 函式名 參數列 const 其中,const是加在函式說明後面的型別修飾符,它是函式...

C const成員函式和const常物件

1 可以訪問所有成員變數,但是不能修改,此類成員函式又稱 常成員函式 2 宣告或實現時必須在函式的結尾加上const,而不是在函式的開頭。int getage const 在結尾加 1 常物件只能訪問常成員函式,常成員變數和普通成員變數都可以訪問。using namespace std class ...