C++常量与字面量完全手册:类型、语法与最佳实践
常量指程序运行期间不可更改的固定值,亦称字面量。常量可属于任意基本数据类型,分为:整数、浮点数、字符、字符串、布尔五大类。常量本质是“只读变量”,定义后值不可修改。
整数字面量
支持十进制、八进制(前缀0)、十六进制(前缀0x/0X)。后缀U/u(unsigned)、L/l(long)可组合、大小写不敏感、顺序任意。示例:
212 // 合法 十进制
215u // 合法 unsigned int
0xFeeL // 合法 unsigned long (十六进制)
078 // 非法:8非八进制数字
032UU // 非法:后缀重复
更多形式:
85 // 十进制
0213 // 八进制
0x4b // 十六进制
30 // int
30u // unsigned int
30l // long
30ul // unsigned long
浮点数字面量
包含整数部分、小数点、小数部分、指数部分。两种形式:
- 十进制形式:必须包含小数点、指数、或两者兼有。
- 指数形式:必须包含整数部分、小数部分、或两者兼有。指数以
e/E引入,可带符号。
示例:
3.14159 // 合法
314159E-5L // 合法
510E // 非法:指数不完整
210f // 非法:无小数点也无指数
.e55 // 非法:缺整数或小数部分
布尔字面量
标准关键字:true(真)、false(假)。切勿认为true等于1、false等于0,虽可隐式转换,但语义不同。
字符字面量
单引号括起。前缀L(仅大写)表示宽字符(如L'x'),存入wchar_t;否则为窄字符(如'x'),存入char。字符字面量可为:
- 普通字符:
'x' - 转义序列:
'\t'(制表) - 通用字符:
'\u02C0'
常用转义序列对照表:
| 转义序列 | 含义 |
|---|---|
| \\ | \字符 |
| \' | '字符 |
| \" | "字符 |
| \? | ?字符 |
| \a | 响铃/警报 |
| \b | 退格 |
| \f | 换页 |
| \n | 换行 |
| \r | 回车 |
| \t | 水平制表 |
| \v | 垂直制表 |
| \ooo | 1-3位八进制数 |
| \xhh... | 1位或多位十六进制数 |
演示示例:
#include <iostream>
using namespace std;
int main() {
cout << "Hello\tWorld\n\n";
return 0;
}
输出:
Hello World
字符串字面量
双引号括起。内容可含普通字符、转义序列、通用字符。长字符串可拆分多行,以空白分隔自动拼接。以下三种形式等价:
"hello, dear"
"hello, \ dear"
"hello, " "d" "ear"
定义常量的两种方式
#define预处理指令const关键字
#define预处理器
语法:#define identifier value。示例:
#include <iostream>
using namespace std;
#define LENGTH 10
#define WIDTH 5
#define NEWLINE '\n'
int main() {
int area = LENGTH * WIDTH;
cout << area << NEWLINE;
return 0;
}
输出50。预处理阶段直接文本替换。
const关键字
语法:const type variable = value;。示例:
#include <iostream>
using namespace std;
int main() {
const int LENGTH = 10;
const int WIDTH = 5;
const char NEWLINE = '\n';
int area = LENGTH * WIDTH;
cout << area << NEWLINE;
return 0;
}
输出50。const具类型安全、作用域约束、可调试等优势,推荐优先使用。约定俗成:常量名全大写(如MAX_SIZE)。
C语言