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

C++ const 關鍵字完全指南:引用、迭代器、指針、成員函數

     編輯:關於C++

1. const 引用

  • 綁定 const 對象:const int& ref = val;,不可通過引用修改。
  • 綁定臨時對象/字面值:const int& r = 42; const int& r2 = r + i; 延長臨時量生命週期至引用作用域結束。
  • 非 const 引用不能綁定 const 對象、臨時量或不同類型對象。

2. 容器 const_iterator

  • vector<string>::const_iterator:迭代器本身可變(++/--),解引用得 const string&,不可修改元素。
  • 適用於只讀遍歷:
for (auto it = vec.cbegin(); it != vec.cend(); ++it)
    cout << *it << endl;  // *it 為 const

3. const_iterator vs const 迭代器

4. 指向 const 對象的指針

const double* cptr;        // 指針可變,指向內容不可變
const double pi = 3.14;
cptr = π                // OK
*cptr = 2.71;              // Error
double dval = 3.14;
cptr = &dval;              // OK,但仍不可通過 cptr 修改 dval

常用作函數參數保證不修改實參:void func(const int* p);

5. const 指針(指針本身不可變)

int errNumb = 0;
int* const curErr = &errNumb;  // 必須初始化
*curErr = 1;     // OK,修改指向對象
curErr = nullptr; // Error,指針本身不可變

6. 指向 const 的 const 指針

const double pi = 3.14159;
const double* const pi_ptr = π  // 雙重 const,指針與指向內容均不可變

讀法:從右向左——pi_ptr 是 const 指針,指向 const double。

7. 成員函數 const 限定

class MyClass {
    mutable int cache_;  // 可在 const 函數中修改
    int value_;
public:
    int getValue() const { return value_; }        // 不修改成員
    int getCached() const {                        // 邏輯 const,物理修改 cache
        if (!cached_) { cache_ = compute(); cached_ = true; }
        return cache_;
    }
    void setValue(int v) { value_ = v; }           // 非 const
};
  • const 成員函數隱式 this 為 const MyClass*,不可修改非 mutable 成員。
  • mutable 允許邏輯不可變但物理可變的成員(緩存、鎖、統計計數)。
  • 重載決議區分 const/非 const 對象調用。

8. 最佳實踐總結

  1. 默認變量、參數、返回值、成員函數盡量加 const,表達不可變意圖,編譯器強制執行。
  2. 指針/引用參數優先 const T& 或 const T*。
  3. 迭代器遍歷只讀用 cbegin()/cend() 或 const_iterator。
  4. mutable 僅用於不影響對象可觀測狀態的內部機制。
  5. 構造函數/析構函數不能是 const。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
聲明含義迭代器可變元素可變
const_iterator指向 const 元素的迭代器是否
const iteratorconst 的迭代器(須初始化)否取決於 iterator 類型