C++ const关键字总结
const是一個C++語言的限定符,它限定一個變量不允許被改變。使用const在一定程度上可以提高程序的安全性和可靠性。另外,在觀看別人代碼的時候,清晰理解const所起的作用,對理解對方的程序也有一些幫助。
1. 修飾常量
用const修飾的變量是不可變的,以下兩種定義形式在本質上是一樣的:
const int a = 10; int const a = 10;2. 修飾指針
如果const位于*的左側,則const就是用來修飾指針所指向的變量,即指針指向為常量;
如果const位于*的右側,const就是修飾指針本身,即指針本身是常量。
因此,推薦使用int const* p,而不是使用const int* p(雖然兩者意義完全一樣),這樣更容易理解。
3. 修飾引用
以下兩種定義形式在本質上是一樣的:
int a = 10; const int& b = a; int const& b = a;4. 修飾函數參數
用const修飾函數參數,傳遞過來的參數在函數內不可以改變。
void func (const int& n) {n = 10; // 編譯錯誤 }5.?修飾函數返回值
用const修飾函數返回值的含義和用const修飾普通變量以及指針的含義基本相同。
const int* func() // 返回的指針所指向的內容不能修改 {// return p; }6. 修飾類成員變量
用const修飾的類成員變量,只能在類的構造函數初始化列表中賦值,不能在類構造函數體內賦值。
class A { public:A(int x) : a(x) // 正確 {//a = x; // 錯誤 }private:const int a; };
7. 修飾類成員函數
用const修飾的類成員函數,在該函數體內不能改變該類對象的任何成員變量, 也不能調用類中任何非const成員函數。
class A { public:int& getValue() const{// a = 10; // 錯誤return a;}private:int a; // 非const成員變量 };8. 修飾類對象
用const修飾的類對象,該對象內的任何成員變量都不能被修改。
因此不能調用該對象的任何非const成員函數,因為對非const成員函數的調用會有修改成員變量的企圖。
9. 在類內重載成員函數
class A { public:void func() {}void func() const {} // 重載 };10. const與宏定義的區別
const常量有數據類型,而宏常量沒有數據類型。編譯器可以對前者進行類型安全檢查,而對后者只進行字符替換,沒有類型安全檢查,并且在字符替換時可能會產生意料不到的錯誤。
const常量從匯編的角度來看,只是給出了對應的內存地址,而不是象#define一樣給出的是立即數,所以,const定義的常量在程序運行過程中只有一份拷貝,而#define定義的常量在內存中有若干個拷貝。
另外,編譯器通常不為const常量分配存儲空間,而是將它們保存在符號表中,這使得它成為一個編譯期間的常量,沒有了存儲與讀內存的操作,使得它的效率也很高。
11. const_cast
const_cast運算符用來修改類型的const或volatile屬性。
一、常量指針被轉化成非常量的指針,并且仍然指向原來的對象;
二、常量引用被轉換成非常量的引用,并且仍然指向原來的對象。
轉載于:https://www.cnblogs.com/chogen/p/4574118.html
總結
以上是生活随笔為你收集整理的C++ const关键字总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LAMP环境安装与apache配置
- 下一篇: springboot-jpa-query