在C++中,可以在數字字面量后面添加字母后綴(或前綴)來表示特定的數據類型。這些后綴能夠明確指定字面量的類型,避免類型轉換帶來的潛在問題。以下是常見的幾種類型后綴及其含義:
1. 整數后綴
u
或U
:表示unsigned
類型。unsigned int a = 42U; // 無符號整數
l
或L
:表示long
類型(建議使用大寫L
,避免與數字1
混淆)。long b = 1000L; // long類型
ll
或LL
:表示long long
類型。long long c = 9999999999LL; // long long類型
- 組合后綴:可以組合使用,如
UL
(unsigned long
)、ULL
(unsigned long long
)。unsigned long long d = 18446744073709551615ULL;
2. 浮點數后綴
f
或F
:表示float
類型。float e = 3.14F; // float類型(單精度)
l
或L
:表示long double
類型。long double f = 3.14159265358979L; // long double類型
- 無后綴:默認是
double
類型。double g = 3.14; // double類型(雙精度)
3. 字符和字符串字面量
u8
:表示 UTF-8 字符串字面量(C++11 起)。const char* str = u8"你好"; // UTF-8編碼
u
:表示char16_t
類型的 Unicode 字符/字符串。char16_t c = u'π'; // UTF-16編碼
U
:表示char32_t
類型的 Unicode 字符/字符串。char32_t d = U'🐶'; // UTF-32編碼
L
:表示寬字符/寬字符串(wchar_t
類型)。wchar_t wc = L'中'; // 寬字符
4. 二進制和十六進制前綴
0b
或0B
:表示二進制字面量(C++14 起)。int bin = 0b1010; // 二進制,等于10
0x
或0X
:表示十六進制字面量。int hex = 0xFF; // 十六進制,等于255
0
:前綴為0
表示八進制字面量。int oct = 010; // 八進制,等于8
示例總結
后綴 | 類型 | 示例 |
---|---|---|
U | unsigned int | 42U |
L | long | 1000L |
LL | long long | 9999999999LL |
UL | unsigned long | 123456789UL |
ULL | unsigned long long | 18446744073709551615ULL |
F | float | 3.14F |
L | long double | 3.14159265358979L |
注意事項
- 避免混淆:
LL
表示long long
,而l
容易與數字1
混淆,建議使用大寫L
。 - 類型范圍:使用后綴可以避免隱式類型轉換導致的溢出問題,例如:
// 錯誤:默認是int,可能溢出 long long overflow = 9999999999; // 未加LL,可能導致溢出// 正確:明確指定為long long類型 long long correct = 9999999999LL;