字面值(Literals)

C++ 字面值(Literals)

在 C++ 中,字面值(Literal)是直接寫在程式碼中的固定值。每個字面值都有其對應的型態,環境會在程式啟動初期依照該值的型態配置記憶體儲存該值。

一、 整數字面值 (Integer Literals)

整數字面值可以用四種不同的進位制表示:十進位、八進位、十六進位與二進位。

進位制 前綴 範例 說明
十進位 (Decimal) 無 (No prefix) 2025 日常使用的數字。
八進位 (Octal) 0 (零) 037 表示十進位的 31 。
十六進位 (Hexadecimal) 0x0X 0xAF 表示十進位的 175。
二進位 (Binary) (C++14 起) 0b0B 0b1010 表示十進位的 10。

型態後綴 (Suffixes)

整數字面值預設的型態通常是能夠容納該值的最小型態,通常是 int。可以使用後綴來強制指定型態:

後綴 意義 範例 型態
uU 無符號 (Unsigned) 100u unsigned int
lL 長整數 (Long) 100L long
llLL 長長整數 (Long Long) (C++11 起) 100LL long long
組合 無符號長整數 100ul100LU unsigned long
組合 無符號長長整數 100ull100ULL unsigned long long

範例:

int a = 10;
unsigned int b = 10u;
long c = 10L;
long long d = 10LL;
int hex_val = 0xFF;  // 十六進位
int oct_val = 010;   // 八進位 (十進位的 8)


二、 浮點數字面值 (Floating-Point Literals)

浮點數字面值可以表示帶有小數或指數的數值。預設的型態是 double

格式

  1. 標準十進位表示法: 必須包含小數點。
    • 範例: 3.14, 0.5, .5 (不建議),2. (不建議)
  2. 科學記號表示法 (Scientific Notation): 使用 eE 後接指數。
    • 範例: 3.14E1
    • 範例: 1e-3

型態後綴 (Suffixes)

後綴 意義 範例 型態
fF 單精度浮點數 (Float) 3.14f float
lL 擴展精度浮點數 (Long Double) 3.14L long double

範例:

double d = 1.23;
float f = 1.23f;
long double ld = 1.23L;
double sci = 1.0E-5; // 0.00001


三、 字元字面值 (Character Literals)

字元字面值由單引號 (') 括起來。

字面值 說明 預設型態
'a' 普通窄字元 char
L'a' 寬字元 wchar_t
u'a' 16 位 Unicode 字元 (C++11 起) char16_t
U'a' 32 位 Unicode 字元 (C++11 起) char32_t

跳脫字元 (Escape Sequences)

用於表示無法直接列印或具有特殊意義的字元。

序列 意義
\n換行 (Newline)
\t水平定位 (Tab)
\\反斜線 (Backslash)
\'單引號 (Single quote)
\"雙引號 (Double quote)
\0空字元 (Null character)
\ooo八進位表示 (如 \101 表示 'A')
\xdd十六進位表示 (如 \x41 表示 'A')

範例:

char c1 = 'A';
char c2 = '\n'; // 換行
char c3 = '\t'; // Tab
char c4 = '\\'; // 反斜線
wchar_t wc = L'界'; // 寬字元


四、 字串字面值 (String Literals)

字串字面值由雙引號 (") 括起來,本質上是一個以空字元 (\0) 結尾的 const char 陣列。(不是 string)

字面值 說明 型態
"Hello" 普通窄字串 const char[]
L"Hello" 寬字串 const wchar_t[]
u8"Hello" UTF-8 字串 (C++11 起) const char[]
u"Hello" 16 位 Unicode 字串 (C++11 起) const char16_t[]
U"Hello" 32 位 Unicode 字串 (C++11 起) const char32_t[]

原始字串字面值 (Raw String Literals) (C++11 起)

原始字串字面值可以避免處理跳脫字元,特別適用於包含大量反斜線(如 Windows 路徑或正規表達式)的字串。格式為 R"分隔符(內容)分隔符"

範例:

const char path[] = R"(C:\Program Files\MyApp\data.txt)";
const char pattern[] = R"delimeter(\d+(\.\d+)?)delimeter";

字串字面值串接 (Concatenation)

相鄰的字串字面值會被編譯器自動串接成一個字串。(不能用 '+' 串接字串字面值)

const char s[] = "Hello, " "World!"; // 等同於 "Hello, World!"

五、 布林字面值 (Boolean Literals)

布林字面值只有兩個:

字面值 意義 型態
truebool
falsebool

返回課程目錄
許老師APCS線上家教

留言

這個網誌中的熱門文章

目錄

資料型態

Code::Blocks