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

C++ const 關鍵字完全總結:從基礎到進階用法

     編輯:C++ 入門

一、const 修飾變量

const int a = 10; —— a 為只讀,編譯期常量(可能進入符號表,不分配內存)。

指針與 const(從右向左讀):

聲明含義可修改
const int* p / int const* p指向常量的指針*p 不可改,p 可改
int* const p常量指針p 不可改,*p 可改
const int* const p指向常量的常量指針雙方均不可改

二、const 修飾函數參數

  • void f(const int& x):傳引用避免拷貝,承諾不修改 x。
  • void f(const int* p):同理。
  • 形參為值傳遞時 const int x 無實際意義(編譯器忽略)。

三、const 成員函數

在參數列表後加 const:

class Date {
    int month;
public:
    int getMonth() const { return month; } // 承諾不修改成員
    void setMonth(int m) { month = m; }    // 非 const,可修改
};
  • const 對象只能調用 const 成員函數。
  • mutable 成員可在 const 函數中修改(如緩存、鎖)。
  • 構造/析構函數不能加 const,但可被 const 對象調用。

四、const 與類類型成員初始化

  • static const int 整型靜態常量:類內初始化(C++11 前僅限整型)。
  • 非靜態 const 成員:必須在構造函數初始值列表初始化(C++11 允許類內默認初始化)。
  • 非常量靜態成員:類外定義初始化。

五、const 轉換與 const_cast

  • 可將 const 加在更嚴格處:int* → const int* 隱式轉換安全。
  • 去除 const 需 const_cast,極度危險,僅用於對接無 const 正確性的舊 API。
  • 對原本為 const 的對象通過 const_cast 修改 → 未定義行為。

六、C vs C++ const 差異

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
特性CC++
const 變量本質只讀變量(有內存)編譯期常量(可能無內存)
外部鏈接默認 external默認 internal(需 extern 導出)
數組長度不可作 VLA 長度可作數組長度(編譯期常量)