在 C++ 中使用帶有指標的 const 關鍵字
Jinku Hu
2023年10月12日
本文將向你展示如何在 C++ 中使用帶有指標的 const
關鍵字的方法。
使用 const
關鍵字表示 C++ 中的不可變物件
通常,const
關鍵字用於指定給定的物件在整個程式執行過程中是不可變的。與直接指定字面值相比,命名常量值的做法有助於保持程式碼庫的可調整性和易於維護性。此外,函式介面高度利用 const
關鍵字來指示給定的引數是隻讀的,並有助於將執行時錯誤減少到編譯時錯誤。
我們通過在型別說明符之前包含關鍵字來宣告一個 const
物件,如下面的程式碼片段所示。在這裡,你將觀察到 s1
變數被建立為只讀 string
,並且 const
物件不能被分配不同的值。因此,它們必須在宣告期間進行初始化。如果我們嘗試修改 const
物件,則會丟擲編譯器錯誤。
#include <iostream>
using std::cout;
using std::endl;
using std::string;
int main() {
const string s1("Hello");
string s2("Hello");
// s1 += "Joe"; // Error
s2 += "Joe";
cout << "s1: " << s1 << endl;
cout << "s2: " << s2 << endl;
return EXIT_SUCCESS;
}
輸出:
s1: Hello
s2: HelloJoe
在 C++ 指標型別中使用 const
關鍵字
請注意,當我們宣告一個指標物件時,我們通常也會包含指向物件的型別。因此,僅指定一個 const
關鍵字作為宣告語句的字首變得很棘手。因此,我們需要為指標和指向物件本身設定單獨的 const
說明符。
通常,我們會有這些說明符的三種組合:第一種是指標和物件都是不可修改的;指標不能重新分配的第二種組合,但物件本身是可變的;最後,我們有了指標可變而物件不可變的變體。
所有三個變體都在下一個程式碼片段中宣告,以演示相應的語法表示法。有時,建議從最右邊的說明符到左邊閱讀這些宣告,但你也可以記住 *const
宣告符用於指示不可變指標。
#include <iostream>
using std::cout;
using std::endl;
using std::string;
int main() {
string s2("Hello");
const string *const s3 = &s2; // both are non-mutable
s3 = &s2; // Error
*s3 = s2; // Error
const string *s4 = &s2; // only string object is non-mutable
s4 = s3;
*s4 = s2; // Error
string *const s5 = &s2; // only pointer is non-mutable
s5 = s3; // Error
*s5 = s2;
return EXIT_SUCCESS;
}
作者: Jinku Hu