一、C++的const常量的判別準則
(1)只有用字面量初始化的const常量纔會進入符號表
(2)被volatile修飾的const常量不會進入符號表
(3)使用其它變量初始化的cosnt常量仍然是隻讀變量
(4)在編譯期間不能直接確定初始值的const標識符,都被作爲只讀變量處理。
(5)使用相同類型的常量初始化const引用變量,const引用變量只是只讀變量,和常量內存地址一樣。
(6)使用不同類型的變量初始化const引用變量,const引用變量會成爲一個新的只讀變量,和初始化變量內存不一樣。
上述的第(1)點如圖1所示;第(2)、(3)、(4)點如圖2所示;第(5)、(6)點如圖3所示:
圖1
圖2
圖3
二、引用與指針的關係
指針是一個變量,值爲一個內存地址,不需要初始化,可以保存不同的地址;通過指針可以訪問對應內存地址中的值;指針可以被const修飾成爲常量或者只讀變量。
引用只是一個變量的新名字;對引用的操作(賦值、取地址等)都會傳遞到代表的變量上,const引用使其代表的變量具有隻讀屬性;引用必須在定義時初始化,之後無法代表其它變量。
從使用C++語言的角度看;引用與指針沒有任何的關係;引用是變量的新名字,操作引用就是操作對應的變量。
從C++編譯器的角度看;爲了支持新概念“引用”必須要一個有效的解決方案,在編譯器內部,使用指針常量來實現“引用”;因此“引用”在定義時必須初始化。
引用數組的使用和注意情況如圖4所示:
圖4
三、小結
(1)指針是一個變量;
(2)引用是一個變量的新名字;
(3)const引用能夠生產新的只讀變量;
(4)在編譯器內部使用指針常量實現“引用”;
(5)編譯時不能直接確定初始值的const標識符都是隻讀變量。