在 C++ 中,const 關鍵字用於表達「不可修改」的語意,正確使用能提升程式碼安全性與可讀性。本文釐清 const 物件、const 成員函數、mutable 關鍵字及函數重載的關鍵規則。
const,承諾不修改成員變數。class Employee {
string name;
int age;
mutable int x; // 可在 const 函數中修改
public:
Employee(string n, int a) : name(n), age(a) {}
// const 成員函數:承諾不修改 name、age
string getName() const { return name; }
// 非 const 版本
void show() { cout << name << "今年" << age << "歲了" << endl; }
// const 版本:正確語法是 const 放在參數列表後
void show() const {
cout << name << "今年" << age << "歲了" << endl;
x = 100; // OK:mutable 允許修改
}
};
int main() {
Employee em("張三", 18);
em.show(); // 呼叫非 const 版本
const Employee em2("李四", 21);
em2.show(); // 呼叫 const 版本
em2.getName(); // OK
// em2.setName("王五"); // 編譯錯誤:const 物件不可呼叫非 const 函數
}
const void show() 修飾的是回傳值,非成員函數屬性。正確寫法:void show() const。「凡是不修改成員的成員函數,都應宣告為 const」。這不僅能讓 const 物件使用,更能向呼叫端清楚傳達函數的副作用,是 C++ 專業開發的基本素養。