在 C++ 中,當類別同時提供 const 與非 const 版本的重載成員函數時,編譯器會根據物件的 const 屬性自動選擇合適的版本。這是一個核心的語言特性,正確理解它對於編寫高品質的 C++ 程式碼至關重要。
const 成員函數。若嘗試調用非 const 版本,編譯器將報錯。const 版本;若僅有 const 版本,則可調用 const 版本(隱式轉換)。class Demo {
public:
void func() { /* 非 const 版本 */ }
void func() const { /* const 版本 */ }
};
int main() {
Demo obj; // 非 const 物件
const Demo cobj; // const 物件
obj.func(); // 呼叫非 const 版本
cobj.func(); // 呼叫 const 版本
}
針對不修改物件狀態的查詢型操作,務必提供 const 版本;修改狀態的操作則提供非 const 版本。這樣既能保證 const 正確性,又能讓編譯器自動進行最佳匹配。
切勿試圖在 const 成員函數中修改成員變數(除非該成員被宣告為 mutable),否則會導致編譯錯誤。