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