1. const的基本使用
用法1
const int Constant1=96;
這個無需贅述。
用法2
const int * Constant2 等價于 int const * Constant2
是說這個 Constant2 這個指針指向的數是常量,不能變。
用法3
int * const Constant3
是說這個 Constant3 這個指針自己是常量,不能再指向其他變量了。
2. const 在函數返回值中的使用
char *Function1()
{
return "Some text";
}
Function1()[1] = 'a';
這么做會導致程序運行崩潰,然后我們就得費力地去追蹤錯誤。
而如果我們像下面這樣寫的話:
const char *Function1()
{
return "Some text";
}
Function1()[1] = 'a';
在編譯階段就會報錯,告訴我們我們在嘗試改一個常量,省去了我們追蹤錯誤的煩惱。
3. const 在傳參時的使用
void Subroutine(int Parameter1)
{
printf("%d", Parameter1);
}
在 C/C++ 中傳參默認是是傳一個拷貝值,這也是為什么函數里面對參數進行改變卻不能影響外面。
而引用是直接將函數外面的值傳進來,因此就可以修改了。
所以通常來說使用“引用”是為了改變函數外的值。
而有時候我們不想修改外面的值為什么還要用引用呢?
這是因為有的變量對象實在太大,拷貝太浪費內存,因此我們想直接訪問而不是拷貝。
但是這時候這些變量是不能改變的,所以為了防止我們一不小心忘了這茬,我們加上一個 const。
這樣,我們既能直接訪問變量,又能確保不會改變他們。
就像這樣:
void Subroutine(big_structure_type const &Parameter1);
4. const在類里面的使用
對象的 method 訪問 member variables 時都是直接訪問,因此可以改變這些成員變量的值。
有些 method 我們明確希望他們沒有改變成員變量的能力,這時候就需要const。
class Class1
{
void Method1() const;
int MemberVariable1;
}
5. 總結
舉個栗子~:
const int* const Method3(const int* const&)const;
從左往右:
第一個 const 是說 返回的指針指向的 int 值不能變
第二個 const 是說 返回的指針自己不能變
第三個 const 是說 參數里 int* 指針指向的值不能改變,這就要求實參自身必須是 const int*
第四個 const 是說 參數里 int* 指針自身不能變 (配合 & 使用)
第五個 const 是說 這個method 不能改變對象里面的成員變量