C++中的const的使用
const 意為常數,總的來說就是被const修飾過的數無法進行修改。
好處:
1、保護資料,增強程式碼的健壯性。
2、便於進行型別檢查。 const常量有資料型別,而巨集常量沒有資料型別。編譯器可以對前者進行型別安全檢查,而對後者只進行字元替換,沒有型別安全檢查,並且在字元替換時可能會產生意料不到的錯誤。
3、可以節省空間,避免不必要的記憶體分配。
4、提高了效率。 編譯器通常不為普通const常量分配儲存空間,而是將它們儲存在符號表中,這使得它成為一個編譯期間的常量,沒有了儲存與讀記憶體的操作,使得它的效率也很高。
用法:
1、const用於將某個變數變為常值,使其在接下來的程式中無法再次被更新,否則編譯器將報錯。
ps:如果要對該變數進行操作,只能在初始化時對其進行操作。
int f(const int a)//a在該函式中將無法進行修改。
{
...;
}
int main()
{
const int a;.//a在程式中將不能修改 。
}
const int *p;//該處p指標的值也無法進行更新。
2、用於在類中宣告該函式是是上個函式的過載。
class P { public: int a; void f(); void f() const;//此處宣告f函式過載 }
3、常引用。格式為
const 型別識別符號 & 引用名;
常引用所引用的物件不會被更新,並且如果被引用量是常量那麼只能通過常引用引用。
void f(const int &a,const int &b)//a,b所被引用的值在該函式中無法被更新。
ps:
const 轉換為非 const的方法:
採用const_cast 進行轉換。
用法:const_cast <type_id> (expression)
該運算子用來修改型別的const或volatile屬性。除了const 或volatile修飾之外, type_id和expression的型別是一樣的。
常量指標被轉化成非常量指標,並且仍然指向原來的物件;
常量引用被轉換成非常量引用,並且仍然指向原來的物件;
常量物件被轉換成非常量物件。
編譯器通常不為普通const常量分配儲存空間,而是將它們儲存在符號表中,這使得它成為一個編譯期間的常量,沒有了儲存與讀記憶體的操作,使得它的效率也很高 |