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

C++ 常數完整指南:字面常數、定義常數、const、constexpr 與最佳實務

     編輯:C++ 入門

C++ 常數完整指南:字面常數、定義常數、const、constexpr 與最佳實務

常數 是程式執行期間固定不變的值,又稱字面常數。分為整數、浮點數、字元、字串、布林等基本型別。

字面常數語法

類別範例說明
整數212, 215u, 0xFeeL, 0213前綴:0x/0X=十六進位,0=八進位;後綴:u=unsigned, l=long (大小寫皆可)
浮點數3.14159, 314159E-5L, .123十進位或科學記號;後綴 f/F=float, l/L=long double
布林true, false關鍵字,非 1/0
字元'a', '\n', L'中', '\u4E2D'單引號;L 前綴=寬字元 (wchar_t);轉義序列、通用字元名
字串"Hello", "Line1\nLine2", L"寬字串"雙引號;隱含結尾 '\0';相鄰字串字面常數自動連接

常見字元轉義序列

序列意義
\n換行
\t水平定位
\\反斜線
\"雙引號
\'單引號
\xhh十六進位字元
\ooo八進位字元 (1-3 位)

定義具名常數:兩大方式

1. #define 前置處理器 (C 風格)


#define PI 3.1415926535
#define MAX_SIZE 1024
#define GREETING "Hello"

特點:文字替換、無型別檢查、無作用域(全域可見)、除錯困難(符號表無記錄)。

2. const 關鍵字 (C++ 風格,推薦)


const double PI = 3.1415926535;
const int MAX_SIZE = 1024;
const char* GREETING = "Hello";

優點:型別安全、有作用域、進入符號表可除錯、可用於編譯期常數表達式(配合 constexpr)。

範例比較


// #define 版
#define LENGTH 10
#define WIDTH 5
int area = LENGTH * WIDTH;

// const 版
const int LENGTH = 10;
const int WIDTH = 5;
int area = LENGTH * WIDTH;

兩者輸出皆為 50,但 const 版本型別為 int,可參與型別檢查與多載解析。

constexpr:編譯期常數 (C++11)

constexpr 宣告編譯期可求值的常數或函數,比 const 語意更強:


constexpr double PI = 3.1415926535;        // 編譯期常數
constexpr int factorial(int n) {           // 編譯期函數
    return n <= 1 ? 1 : n * factorial(n-1);
}
constexpr int FAC5 = factorial(5);         // 編譯期計算 = 120
int arr[FAC5];                             // 合法:陣列大小需編譯期常數

規則:constexpr 變數隱含 const,初始化式必須為常數表達式;constexpr 函數隱含 inline,本體受限(C++14 大幅放寬)。

常數命名慣例

  • 全大寫 + 底線分隔:MAX_BUFFER_SIZE、DEFAULT_TIMEOUT_MS。
  • 模組前綴避免衝突:NET_MAX_CONN、DB_POOL_SIZE。
  • constexpr 全域常數視為 API 契約一部分,命名更謹慎。

字串常數特殊處理


const char* msg = "Hello" "World";  // 自動連接 → "HelloWorld"
const char* path = "/usr/" "local/" "bin";  // 可跨行

總結

  • 棄用 #define 定義常數,改用 const (執行期) / constexpr (編譯期)。
  • constexpr 擴展編譯期計算能力,支援陣列大小、模板參數、std::array 大小等語境。
  • 字面常數掌握前後綴、轉義序列、字串連接規則。
  • 命名全大寫,建立專案統一風格指南。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved