在 C++ 中,变量用于存储可变数据,常量用于存储不可变数据。以下是定义规范及示例:
一、变量定义
语法:数据类型 变量名 [ = 初始值 ];
1. 基本变量定义
int age = 25; // 整型
double price = 9.99; // 双精度浮点型
char grade = 'A'; // 字符型
bool isValid = true; // 布尔型
std::string name = "Alice"; // 字符串型(需 #include <string>)
2. 多变量定义
int x = 5, y = 10, z; // 定义多个同类型变量(z 未初始化)
3. 初始化方式
- 拷贝初始化:
int n = 10; - 直接初始化:
int n(10); - 列表初始化(C++11 起):
int n{10};// 防止窄化转换(如浮点转整型会报错)
二、常量定义
1. const 常量(运行时确定值)
语法:const 数据类型 常量名 = 值;
const double PI = 3.14159;
const int MAX_SIZE = 100;
2. constexpr 常量(编译时确定值,C++11)
语法:constexpr 数据类型 常量名 = 值;
constexpr int ARRAY_SIZE = 10;
int arr[ARRAY_SIZE]; // 可用于数组大小
3. 宏常量(不推荐)
#define TAX_RATE 0.08 // 预处理器替换,无类型检查
三、关键对比
| 特性 | 变量(Variable) | 常量(Const/constexpr) |
|---|---|---|
| 可变性 | 值可修改 | 值不可修改 |
| 初始化 | 可延迟初始化 | 必须定义时初始化 |
| 定义示例 | int count = 0; |
const int MAX = 100; |
| 类型安全 | 是 | const 是,#define 否 |
| 作用域 | 遵守块作用域 | 同变量(#define 全局) |
四、高级用法
1. 指针与常量
const int* ptr1 = &x; // 指针指向的值不可变
int* const ptr2 = &x; // 指针本身不可变
const int* const ptr3 = &x; // 指针和值均不可变
2. auto 类型推导(C++11)
auto score = 95; // 自动推导为 int
auto flag = true; // 推导为 bool
3. 常量表达式函数
constexpr int square(int n) {
return n * n;
}
constexpr int sq = square(5); // 编译时计算
五、使用建议
- 优先使用 const/constexpr 替代宏常量(类型安全、作用域控制)
- 变量初始化:始终显式初始化变量(避免未定义行为)
- constexpr 可用于:
- 数组大小
- 模板元编程
- 编译时计算优化
- 全局常量建议在头文件中使用
extern声明:// header.h extern const int GLOBAL_CONST; // source.cpp const int GLOBAL_CONST = 42;
注:C++ 中
const默认具有内部链接性(文件作用域),需用extern实现跨文件共享。
浙公网安备 33010602011771号