在C語言中,const ?用來限制一個變量,表示這個變量不能被修改,我們通常稱這樣的變量為常量(Constant),《C語言const:禁止修改變量的值》一節(jié)已經(jīng)進行了細致的講解。
在C++中,const 的含義并沒有改變,只是對細節(jié)進行了一些調(diào)整,以下是最主要的兩點。
C++中的 const 更像編譯階段的 #define
先來看下面的兩條語句:
const int m = 10;int n = m;
我們知道,變量是要占用內(nèi)存的,即使被 const 修飾也不例外。m、n 兩個變量占用不同的內(nèi)存,int
n = m;
表示將 m 的值賦給 n,這個賦值的過程在C和C++中是有區(qū)別的。
在C語言中,編譯器會先到 m 所在的內(nèi)存取出一份數(shù)據(jù),再將這份數(shù)據(jù)賦給 n;而在C++中,編譯器會直接將 10 賦給 m,沒有讀取內(nèi)存的過程,和int
n = 10;
的效果一樣。C++ 中的常量更類似于#define
命令,是一個值替換的過程,只不過#define
是在預(yù)處理階段替換,而常量是在編譯階段替換。
C++ 對 const 的處理少了讀取內(nèi)存的過程,優(yōu)點是提高了程序執(zhí)行效率,缺點是不能反映內(nèi)存的變化,一旦 const 變量被修改,C++ 就不能取得最新的值。
有讀者提出疑問,const 變量不是禁止被修改嗎?對,這種說法沒錯!不過這只是語法層面上的限制,通過指針仍然可以修改。