文章目录
前言
C++ 中的 const 关键字用于定义“常量性”,即标识某个实体不可被修改。它的作用广泛,可以增强代码的安全性、可读性和优化潜力。以下是 const 的主要用法及示例:
一、定义常量变量
- 声明变量为常量,初始化后不可修改。
const int MAX_SIZE = 100;
// MAX_SIZE = 200; // 错误!不可修改
二、指针与 const 结合
- 指向常量的指针:指针指向的值不可变,但指针本身可以指向其他地址。
const int* ptr = &a; // 或 int const* ptr = &a;
// *ptr = 10; // 错误!不能通过 ptr 修改 a 的值
ptr = &b; // 合法,指针可以指向新地址
- 常量指针:指针本身不可变,但指向的值可以修改。
int* const ptr = &a;
*ptr = 10; // 合法,修改 a 的值
// ptr = &b; // 错误!指针地址不可变
- 指向常量的常量指针:指针和指向的值均不可变。
const int* const ptr = &a;
// *ptr = 10; // 错误
// ptr = &b; // 错误
三、函数参数中的 const
- 防止函数内部修改参数,尤其是引用或指针参
void print(const std::string& str) {
// str[0] = 'A'; // 错误!str 是常量引用
std::cout << str;
}
- 传递大型对象时,使用 const 引用 避免拷贝,同时保证安全。
四、成员函数的 const 修饰
- 成员函数声明为 const,表示其不会修改对象状态(除非成员用 mutable 修饰)。
class MyClass {
int value;
public:
int getValue() const {
// value = 10; // 错误!const 函数不能修改成员变量
return value;
}
};
- const 对象 只能调用 const 成员函数。
五、类中的 const 成员变量
- 必须在构造函数初始化列表中初始化。
class Circle {
const double PI = 3.14159; // C++11 起支持类内初始化
public:
Circle() : PI(3.14159) {} // 传统方式(若未类内初始化)
};
六、返回值为 const
- 防止返回值被意外修改。
const int* getData() {
static int data = 42;
return &data; // 返回指向常量的指针
}
// 调用时:*getData() = 10; // 错误!
七、const 与对象
- const 对象 只能调用 const 成员函数。
const MyClass obj;
obj.getValue(); // 合法(getValue 是 const 函数)
// obj.modify(); // 错误!
总结
const 的作用:
- 安全性:防止意外修改数据
- 清晰性:明确代码意图,如参数不可变、函数不修改对象状态等。
- 优化:编译器可能利用 const 进行优化(如将常量放入只读内存)。
合理使用 const 是编写健壮、可维护 C++ 代码的关键习惯。