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 ...