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

C++ 核心關鍵字:const 限定符深度解析

     編輯:關於C++

const 基本語法

const 用於聲明只讀對象,兩種等價寫法:

const int MAX = 100;   // 推薦:const 在類型前
int const MIN = 0;     // 合法但少用

核心規則

  1. 必須初始化:聲明時即賦值,後續不可修改。
  2. 作用域遵循塊規則:塊內定義為局部,塊外為全局(內部鏈接)。
  3. 編譯期常量:若初始值為常量表達式,編譯器可優化為常量傳播。

指針與 const 的四種組合

聲明含義可修改指針可修改所指值
const int* p / int const* p指向常量的指針是否
int* const p常量指針(指針本身不可變)否是
const int* const p指向常量的常量指針否否

代碼實戰演示

#include 
using namespace std;

int main() {
    int val = 10, another = 20;

    // 1. 指向常量的指針
    const int* p1 = &val;
    // *p1 = 20; // 錯誤:不能通過 p1 修改值
    p1 = &another; // 正常:可指向別處

    // 2. 常量指針
    int* const p2 = &val;
    *p2 = 30;      // 正常:可修改所指值
    // p2 = &another; // 錯誤:指針本身不可變

    // 3. 雙重 const
    const int* const p3 = &val;
    // *p3 = 40; // 錯誤
    // p3 = &another; // 錯誤

    // 4. 讀取技巧:從右向左讀
    // const int * const p3
    //      ↑     ↑
    //   指針常量  指向 const int

    cout << "val = " << val << endl; // 30
    return 0;
}

常見編譯錯誤對照

錯誤代碼錯誤信息 (MSVC)原因
const int a;C2734: 必須初始化常量對象未初始化
const int a=1; a=2;C3892: 不能給常量賦值二次賦值

進階應用場景

函數參數傳遞

void print(const string& s); // 避免拷貝,承諾不修改
void process(const int* arr, size_t n); // 僅讀數組

成員函數限定

class Widget {
    int cachedValue;
    mutable int accessCount; // 即使在 const 函數中也可修改
public:
    int value() const { ++accessCount; return cachedValue; } // const 成員函數
};

常量引用綁定臨時對象

const int& ref = 42; // 延長臨時對象生命周期至引用作用域結束

總結

const 是 C++ 類型系統的基石,善用它能:

  • 在編譯期捕獲邏輯錯誤(誤寫賦值)
  • 明確接口契約(只讀意圖)
  • 啟用編譯器優化(常量傳播、內聯)
  • 支持臨時對象綁定與 mutable 緩存模式

記住口訣:「右邊修飾左邊,最左邊修飾右邊」,從右向左讀聲明永不出錯。

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