C++常量的概念及用法
·
在 C++ 中,常量(constant)指的是在程序运行期间其值不能被修改的量。合理使用常量可以提高代码的可读性、安全性和维护性,并帮助编译器做优化。
一、为什么要用常量
-
✅ 防止意外修改数据
-
✅ 提高代码可读性(见名知意)
-
✅ 便于维护和修改
-
✅ 有助于编译期优化
二、C++ 中常量的主要形式
|
方式 |
说明 |
推荐程度 |
|---|---|---|
|
|
运行期或编译期常量 |
⭐⭐⭐⭐ |
|
|
编译期常量(C++11 起) |
⭐⭐⭐⭐⭐ |
|
字面常量 |
直接写在代码中的值 |
⭐⭐⭐ |
|
|
宏常量(不推荐) |
⭐ |
|
|
枚举常量 |
⭐⭐⭐ |
三、const常量(最常用)
1️⃣ 基本用法
const int MAX_SIZE = 100;
MAX_SIZE = 200; // ❌ 错误:不能修改
2️⃣ const与指针
int a = 10;
const int* p1 = &a; // 指向常量的指针(值不能改)
int* const p2 = &a; // 指针本身是常量(地址不能改)
const int* const p3 = &a; // 都不能改
📌 口诀:
“左定值,右定向”
四、constexpr(强烈推荐)
👉 编译期就能确定的常量
constexpr int BUFFER_SIZE = 1024;
✅ 优点:
-
编译期计算
-
可用于数组大小、模板参数等
-
更安全、更高效
constexpr int square(int x) {
return x * x;
}
int arr[square(5)]; // OK(C++11 之后)
📌 优先用 constexpr,而不是 const
五、字面常量
42 // 整型常量
3.14 // 浮点常量
'a' // 字符常量
"hello" // 字符串字面量
true // 布尔常量
⚠️ 字符串字面量是只读的:
char* s = "abc"; // ❌ 不推荐
const char* s = "abc"; // ✅ 正确
六、枚举常量(enum/ enum class)
传统枚举
enum Color {
RED,
GREEN,
BLUE
};
强类型枚举(推荐 ✅)
enum class Status {
OK,
ERROR
};
Status s = Status::OK;
✅ 避免命名污染
✅ 类型安全
七、宏常量(不推荐 ❌)
#define PI 3.14
❌ 无类型检查
❌ 不易调试
✅ 仅用于兼容旧代码
👉 现代 C++ 中应改用 constexpr
八、常量成员函数(类中)
class Person {
public:
int getAge() const { // 常成员函数
return age;
}
private:
int age;
};
✅ 承诺:不会修改对象状态
九、常见面试/易错点
❓ const和 constexpr的区别?
|
对比项 |
const |
constexpr |
|---|---|---|
|
是否一定编译期 |
否 |
是 |
|
是否可做数组大小 |
不一定 |
可以 |
|
推荐程度 |
一般 |
✅✅✅ |
❓ 常量一定要初始化吗?
✅ 是的
const int x = 10; // 必须初始化
十、最佳实践总结 ✅
-
能用
constexpr就别用const -
不用
#define定义常量 -
字符串用
const char*或std::string -
类中使用
const成员函数 -
枚举优先用
enum class
更多推荐
所有评论(0)