在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;