首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ const 物件與 const 成員函數深度解析

     編輯:關於C++

核心概念

在 C++ 中,const 關鍵字用於表達「不可修改」的語意,正確使用能提升程式碼安全性與可讀性。本文釐清 const 物件、const 成員函數、mutable 關鍵字及函數重載的關鍵規則。

五大核心規則

  1. 成員函數可宣告為 const:在參數列表後加上 const,承諾不修改成員變數。
  2. const 物件只能呼叫 const 成員函數:編譯器保證 const 物件不會被修改。
  3. const 與非 const 成員函數可構成重載:依物件的 const 屬性自動選擇對應版本。
  4. 非 const 物件優先呼叫非 const 版本:若兩者皆存在,非 const 物件會選擇非 const 函數。
  5. mutable 成員可在 const 函數中修改:打破 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 位置錯誤:const void show() 修飾的是回傳值,非成員函數屬性。正確寫法:void show() const。
  • 建構子不能是 const:建構子的職責是初始化成員,必然修改物件狀態。
  • getter 應加 const,setter 不能加:符合語意與 const 正確性。

最佳實踐

「凡是不修改成員的成員函數,都應宣告為 const」。這不僅能讓 const 物件使用,更能向呼叫端清楚傳達函數的副作用,是 C++ 專業開發的基本素養。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved