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

C++ 中 const 常量的完整用法解析

     編輯:關於C語言

一、值替代:從宏到編譯器常量

C 語言時代使用 #define BUFSIZE 100 由預處理器進行文字替換。C++ 引入 const 將常量納入編譯器型別系統:

const int bufsize = 100;  // 或 const bufsize = 100; (隱含 int)

編譯器可執行常量折疊,例如 char buf[bufsize]; 直接在編譯期確定陣列大小,兼具型別安全與效率。

1.1 標頭檔中的 const

const 預設具有內部連結,僅在定義它的編譯單元可見。這意味著可在標頭檔直接定義:

// Test.h
const int nTestConst = 1000;

多個 .cpp 包含此標頭檔不會產生重複定義錯誤(非 const 全域變數則會)。若需跨編譯單元共享,必須顯式聲明 extern const int bufsize; 並在單一源文件定義。

1.2 安全性

需保證數值不變時,應優先使用 const,編譯器將阻止意外修改。

1.3 集合應用

const 可修飾陣列,但需分配記憶體,其值無法在編譯期作為常量表達式使用:

const int i[] = {1, 2, 3, 4};
// float f[i[3]]; // 錯誤:i[3] 非編譯期常量

二、指標與 const 的組合規則

指標涉及兩個實體:指標本身(儲存地址的變數)與指向的物件。const 位置決定修飾對象:

2.1 指向 const 的指標

const int *p;    // 或 int const *p;
* p = 20;        // 錯誤:無法修改指向的值
p = &other;      // 正確:可修改指標指向

語讀法:p 是一個指標,指向 const int。

2.2 const 指標

int d = 1;
int * const p = &d;  // 指標本身為常量,初始化後不可改變指向
* p = 2;             // 正確:可修改指向的值
// p = &other;       // 錯誤:指標不可改變

語讀法:p 是一個 const 指標,指向 int。

2.3 口訣總結:「左物右指」

以 * 為分界點:

  • const 在 * 左邊 → 修飾物件值不變(指向 const 的指標)
  • const 在 * 右邊 → 修飾指標不變(const 指標)

兩者可組合:const int * const p = &val; —— 指標與指向值皆不可修改。

三、最佳實踐建議

  • 優先使用 const 替代 #define 定義常量,獲得型別檢查與作用域控制。
  • 函數參數若不修改,應加 const(特別是指標/參考參數),明確語意並防呆。
  • 成員函數不修改物件狀態時標記 const,允許在 const 物件上呼叫。
  • 掌握「左物右指」口訣,快速辨析複雜指標宣告。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved