C++中const用法總結

1修飾變量/指針

  注意以下幾種修飾的區別:

    (1)const int * a;

    (2)int const *a;

    (3)int * const b;

    (4)int const* const c;

  其中前兩種指a是一個指向const int變量的指針;(3)b是一個const型的指向int變量的指針;(4)c是一個const型的指向const int變量的指針。

2修飾函數形參變量/指針/引用

  如

    void fun(const a,const* b,const& c)

  指形參a和b、c在函數fun內是不可以被改變的。

  其實對變量a來說,const對它沒有任何意義,因爲a作爲形參,本來就是實參的一個複製品,它的改變與否與實參沒有任何影響。更常用的是修飾指針或變量,這樣會使得函數的使用者無法改變實際指向/引用的變量,保證了安全性。

3修飾函數返回值

  如

    const int fun1()

    const int* fun2()

    const int& fun3()

  這種用得不是很多,作用類似於修飾變量,返回一個const型的變量

4修飾類對象/指針/引用

  如

    const classA a;

    const classB* b;

    const classC& c;

  (1)不能改變對象的任何成員變量

  (2)不能調用任何非const成員函數

5修飾類成員變量

  (1)不能被修改

  (2)只能在類初始化列表中被賦值

   小總結:只能在類初始化列表中被賦值的情況:

    (1)const成員變量

    (2)引用變量

    (3)基類構造函數

6修飾類成員函數

  如

    void fun() const;

  (1)不能修改類的任何非靜態數據成員(可以修改靜態數據成員);

  (2)不能調用類的任何非const函數(可以調用const成員函數)。 

const常量與define宏定義的區別


  (1) 編譯器處理方式不同

    define宏是在預編譯階段展開。

    const常量是編譯運行階段使用。

  (2) 類型和安全檢查不同

    define宏沒有類型,不做任何類型檢查,僅僅是展開。

    const常量有具體的類型,在編譯階段會執行類型檢查。

  (3) 存儲方式不同

    define宏僅僅是展開,有多少地方使用,就展開多少次,不會分配內存。

    const常量會在內存中分配(可以是堆中也可以是棧中)。

 

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