首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ const 成員函數詳解:QString getUserName() const 含義與常量正確性

     編輯:程式設計綜合問答

語法含義


class User {
    QString name;
public:
    QString getUserName() const { // 尾部 const
        return name;
    }
    void setUserName(const QString& n) { // 參數 const 引用
        name = n;
    }
};

核心規則

  • 承諾不修改對象狀態:`const` 成員函數內**不能**修改非 `mutable` 成員變量,不能調用非 `const` 成員函數。
  • 調用權限:`const` 對象/引用/指針**只能**調用 `const` 成員函數;非 `const` 對象可調用所有成員函數。
  • 重載區分:可同時提供 `const` 和非 `const` 版本,返回類型不同 (如 `operator[]`):

const char& operator[](size_t i) const; // 只讀訪問
char& operator[](size_t i);             // 讀寫訪問

const 關鍵字全家族

形式含義示例
常量變量初始化後不可修改`const int MAX = 100;`
常量引用綁定對象不可通過此引用修改,延長臨時對象壽命`const QString& ref = str;`
常量指針 (底層)指向常量對象,不可通過指針修改內容`const int* p = &val;`
常量指針 (頂層)指針本身不可修改指向`int* const p = &val;`
常量成員函數不修改 `this` 指向對象邏輯狀態`int get() const;`
mutable 成員在 `const` 函數中允許修改 (緩存、鎖、統計計數)`mutable int accessCount;`

最佳實踐

  1. 默認加 const:所有不修改狀態的 getter、查詢方法、比較運算符**必須**加 `const`。
  2. 參數傳遞:大對象傳 `const T&`,小對象 (標量、迭代器、函數對象) 傳值。
  3. 返回值:避免返回非 `const` 引用/指針暴露內部結構;返回 `const T&` 或值。
  4. 構造函數初始化列表**:初始化 `const` 成員與引用成員的唯一位置。

Qt 特有語境

Qt 大量使用 `const` 成員函數 (如 `QString::length() const`),配合隱式共享 (Copy-on-Write) 機制,`const` 版本返回引用計數增加,非 `const` 版本觸發分離拷貝,**正確使用 const 是高效使用 Qt 容器的關鍵**。

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