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

C/C++ 中 const 關鍵字用法全解析

     編輯:關於C++

一、const 基本功能與用法

  1. 修飾唯讀變量:const int i = 50; 必須初始化,不可修改。const int j; 編譯錯誤,i = k; 亦錯誤。
  2. 保護函數參數不被修改
    • const A* a:指針指向的內容不可改,但指針本身可指向別處。
    • const A& a:引用綁定的對象不可改。自定義類型傳參建議用 const 引用 避免拷貝開銷;內建類型傳值即可。
  3. 修飾函數返回值
    • 返回對象本身(非引用/指針)時加 const,常用於運算符重載,防止 (a*b)=c 這類無意義賦值。
    • 返回 const 引用或 const 對象極少用,會限制調用非 const 成員函數。
    • 返回 const 指針:內容不可改,只能賦給 const 同類型指針。
    • 返回 const 引用的賦值運算符:支援鏈式賦值 a=b=c 但禁止 (a=b)=c。
  4. 成員函數後加 const:void fun() const; 承諾不修改數據成員,編譯器強制檢查,提升健壯性。非成員函數加 const 無效果。
  5. 跨文件引用常量:extern const int i; 聲明引用外部常量,extern const int j = 10; 錯誤(不可再次賦值)。

二、const 常量與 #define 差異

  1. 類型安全:const 有類型,編譯器檢查;#define 純文本替換,無類型,易產生意外錯誤(如隱式轉型截斷)。
  2. 內存佔用:const 變量在運行期只有一份拷貝;#define 每次使用都展開成立即數,佔用多份內存。

三、進階注意事項

  1. 強制修改 const 值:通過 int *p = (int*)&i; *p = 100; 繞過編譯器檢查(未定義行為,慎用)。
  2. 構造函數不能是 const。
  3. const 數據成員只能在構造函數初始化列表初始化,函數體內賦值編譯錯誤。
  4. 參數用 const 應配合引用或指針,避免拷貝開銷。
  5. 指針與 const 位置關係:
    • const int *a / int const *a:指向常量的指針(內容不可改)。
    • int *const a:常量指針(指針本身不可改)。
    • const int *const a:雙重 const。
  6. const 成員函數返回的引用也是 const,需匹配返回類型。
  7. mutable 關鍵字:允許 const 對象修改特定成員(如快取、鎖)。

掌握 const 的各種語境,能寫出更安全、可維護、效能更優的 C++ 代碼。

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