【C++基礎】——const是什麼?什麼時候用?與宏定義的區別

基礎知識:

  1. 引用reference:
    引用:複合類型,相當於變量的另外一個名字,綽號,節省了拷貝帶來的內存損耗,在實際程序中,主要用作函數的形式參數;

  2. 類class:
    理解成圖紙,不佔用內存,包括了成員變量和成員函數。對象是類的實例化,可以看成零件。

  3. 指針pointer:
    指針也是一種變量!指針的內容是地址!

〇、什麼是const(必須知道的事情)?

  1. 簡單理解:
    const的目的就是定義一個“不會被修改的常量”

  2. 可以修飾:
    變量、引用、指針,可以用於函數參數、成員函數修飾。成員變量。

  3. 作用:
    使用const可以減少代碼出錯的概率!避免magic number 以及增強程序的可讀性。
    這個常量既可以防止程序其他地方不小心修改這個值,也能讓程序員比較方便的調整這個值的大小。

  4. 與宏定於#define的區別:
    const有類型,可以進行類型檢查,而宏定義沒有。

  5. 常量指針和指針常量
    常量指針(指向常量的指針)
    指針常量(地址是常量,指針指向的地址不變

  6. Const值一旦創建後就不能修改,所以const對象必須初始化;

一、const的初始化:

const值一旦創建後就不能修改,所以const對象必須初始化。

const int i=0;//正確
const int i;//錯誤

const對象可以用非const對象初始化,也可以賦給非const對象,同時也能參與運算,只要初始化後不改變它的值就沒問題。

int i;
const int j=i;//正確
int m=j;//正確

二、const的作用域:

默認狀態下,const對象僅在文件內有效,不同文件的const對象不是同一個對象

文件之間可以共享的方法:可以使用extern來解決問題。

三、const與引用

const 引用是指向const的引用

  • 對常量的引用必須要用const
const int c=42;

int &r1 = c;      //錯誤,因爲非常量引用可以改變所引用對象,所以這樣不合理

const int &r2 = c; //正確,引用與對應的對象都是常量

四、 const與指針:

重要!重要!重要!
對着代碼讀:

  • 把星號*讀作指針,
  • 把const讀作常量
  • 非常容易!!!
    比如:
    const int* p就是——常量指針
    int* const p就是——指針常量
  1. 與常量引用相似,指向常量的指針必須要用const指針(指向常量的指針)
const int c=42;

int *r1=&c;      //錯誤

const int*r2=&c;//正確

*r2=42;//錯誤,不能給指針所指對象賦值
  1. 常量指針(指向const的指針)和指針常量(const指針)

區分

  • 常量指針(指向常量的指針),只能夠讀取內存中數據,卻不能夠修改內存中數據的屬性的指針,稱爲指向常量的指針,簡稱常量指針。
  • 指針常量(地址是常量,指針指向的位置(地址)不變,指針本身是一個常量,但是指針指向的內容可以改變)

(前兩個字作爲形容詞修飾後兩個字。同時大家也要注意const指針這一說法,不要理解成常量指針)

Int num=0;

Int*const cur=#//一直指向num

Const double pi=3.1415;

Const double * const pip=π//指向常量的常量指針。

現在舉例子說明一下常量指針域指針常量到底如何區分。

  1. int const* cur; 常量指針,指向常量的指針

2.Const int * cur; 常量指針,指向常量的指針

  1. int*const cur; 指針常量

  2. const(int *) cur; //錯誤,不可以這麼寫

辨識小技巧:
對着代碼讀,把星號讀作指針,把const讀作常量,非常容易。
Step1: const在星號*的前面,那麼就是常量指針——“const前常量指針”
Step2: const在星號*的後面,那麼就是指針常量——“const後指針常量”

五、 const與類:

  • const成員變量:
    類中聲明變量爲const類型。但是不可以初始化,必須要在構造函數初始化列表中初始化。
    這樣的變量其實只是在一個對象中是不變的,要想在整個類中都不變就得用enum(枚舉)

  • const成員函數:
    這樣的成員函數不可以修改數據成員,如果修改成員變量或者調用了其他非const成員函數就會報錯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章