字面值(Literals)
C++ 字面值(Literals)
在 C++ 中,字面值(Literal)是直接寫在程式碼中的固定值。每個字面值都有其對應的型態,環境會在程式啟動初期依照該值的型態配置記憶體儲存該值。
一、 整數字面值 (Integer Literals)
整數字面值可以用四種不同的進位制表示:十進位、八進位、十六進位與二進位。
| 進位制 | 前綴 | 範例 | 說明 |
|---|---|---|---|
| 十進位 (Decimal) | 無 (No prefix) | 2025 |
日常使用的數字。 |
| 八進位 (Octal) | 0 (零) |
037 |
表示十進位的 31 。 |
| 十六進位 (Hexadecimal) | 0x 或 0X |
0xAF |
表示十進位的 175。 |
| 二進位 (Binary) (C++14 起) | 0b 或 0B |
0b1010 |
表示十進位的 10。 |
型態後綴 (Suffixes)
整數字面值預設的型態通常是能夠容納該值的最小型態,通常是 int。可以使用後綴來強制指定型態:
| 後綴 | 意義 | 範例 | 型態 |
|---|---|---|---|
u 或 U |
無符號 (Unsigned) | 100u |
unsigned int |
l 或 L |
長整數 (Long) | 100L |
long |
ll 或 LL |
長長整數 (Long Long) (C++11 起) | 100LL |
long long |
| 組合 | 無符號長整數 | 100ul 或 100LU |
unsigned long |
| 組合 | 無符號長長整數 | 100ull 或 100ULL |
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。
格式
- 標準十進位表示法: 必須包含小數點。
- 範例:
3.14,0.5,.5(不建議),2.(不建議)
- 範例:
- 科學記號表示法 (Scientific Notation): 使用
e或E後接指數。- 範例:
3.14E1 - 範例:
1e-3
- 範例:
型態後綴 (Suffixes)
| 後綴 | 意義 | 範例 | 型態 |
|---|---|---|---|
f 或 F |
單精度浮點數 (Float) | 3.14f |
float |
l 或 L |
擴展精度浮點數 (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)
布林字面值只有兩個:
| 字面值 | 意義 | 型態 |
|---|---|---|
true | 真 | bool |
false | 假 | bool |
返回課程目錄
許老師APCS線上家教



留言
張貼留言