1. 程式人生 > >const關鍵字以及const和#define的區別

const關鍵字以及const和#define的區別

1.const

- 1.const修飾變數、引數、返回值:

在C++中const修飾變數,使變數變成常量,在宣告的同時必須初始化;C++的const修 飾的全域性變數可以作為屬組的初始化的大小,而C不可以,同時變數的值不能被修改;C++利用const的這一屬性,代替C中的define進行全域性常量的定義;C++會將const修飾的常量進行優化,將常量儲存在暫存器中,如果需要在記憶體中讀取需要使用volatile關鍵字修飾,保證記憶體可見性。在C中const會將變數修飾為常變數,儲存在靜態文字段,只有讀許可權,不能被修改。

- 2.const修飾指標:

const在*左邊,不能改變指標指向的值,const在*右邊不能改變指標的指向

- 3.const修飾引用:

可以把引用繫結到const物件上,常量的引用不能修改它所繫結的物件

- 4.const修飾成員變數:

const修飾的成員變數必須在初始化列表裡面初始化;除此之外,必須在初始化列表初始化的還有引用型別的資料成員,沒有預設建構函式的 物件成員,如果存在繼承關係,如果父類沒有預設的建構函式,則也 必須在初始化列表中被初始化,初始化列表對資料成員的初始化順序 是按照資料成員的宣告順序嚴格執行的;

- 5.const修飾成員函式:

一般放在成員函式的最後面,修飾的是類的成員,在成員函式的後面加上const,const修飾this指標指向的物件,代表不可以通過this指標修改類的資料 成員,宣告形式例如: Base::void fun() const; 也就是保證呼叫const成員函式的物件在成員函式內部不會改變。const修飾的成員函式只能呼叫const成員變數,非const修飾的成員函式可以呼叫const成員函式和const成員函式

2. 巨集和const常量的區別

- 1.巨集沒有型別檢查,只是字元的替換,而且可能由於邊際效應在字元替換時產生意料不到的錯誤;const常量有嚴格的型別檢查
- 2.巨集常量不開闢記憶體空間,const常量開闢記憶體空間
- 3.有些整合化的除錯工具可以對const常量進行除錯,但不能對巨集常量進行除錯
- 4.c++中const完全取代巨集