const用于声明不可变 对象 ,提升安全与性能;可修饰变量、 指针 、函数参数、 成员函数 及返回值;const 对象仅能调用 const 成员函数;mutable可突破 const 限制用于内部状态管理。

在 c++ 中,const关键字是一个非常重要的修饰符,用于声明不可变的变量、函数参数、成员函数和指针等。合理使用 const 不仅能提高代码的安全性和可读性,还能帮助编译器进行优化。下面从多个角度详细说明 const 的常见用法和作用。
1. const 修饰基本 数据类型 变量
用 const 修饰的变量表示其值不能被修改,必须在定义时初始化。
这种 常量 在编译期可能被直接替换为字面值,避免运行时开销。
2. const 与指针的结合使用
const 和指针结合时容易混淆,关键在于理解 const 修饰的是指针本身还是指针指向的内容。
立即学习“C++ 免费学习笔记(深入)”;
- const int* p; // 指针 p 指向一个常量,内容不可改,指针可变
- int const* p; // 同上,等价写法
- int* const p; // 指针 p 是常量,地址不可变,内容可改
- const int* const p; // 指针和内容都不可变
记忆技巧:看 const 紧邻的是 * 还是变量名。若 const 在 * 左边,修饰内容;在 * 右边,修饰指针。
3. const 修饰函数参数
当函数参数为指针或引用时,使用 const 可以防止函数内部意外修改 实参。
这对大型对象尤其重要,既能避免拷贝开销(用引用 / 指针),又能保证安全性。
4. const 成员函数
在类的成员函数后加上 const,表示该函数不会修改类的任何 成员变量(mutable 除外)。
只有 const 成员函数才能被 const 对象调用。这有助于实现 接口 的只读访问。
5. const 与返回值
返回值为 const 类型时,通常用于防止不必要的赋值操作,尤其是重载 运算符 时。
对内置类型返回 const 意义不大,但在自定义类型中可增强安全性。
6. const 对象与构造
const 对象一旦创建就不能修改,且只能调用 const 成员函数。
- const MyClass obj;
- obj.getValue(); // OK,getValue 是 const 函数
- // obj.setValue(5); 错误!非 const 函数不能被 const 对象调用
const 对象必须通过 构造函数 初始化,之后所有成员进入只读状态。
7. mutable 关键字与 const 的例外
有时需要在 const 成员函数中修改某个成员变量,比如用于缓存或计数器,这时可用 mutable 修饰该成员。
- class Logger {
- mutable int callCount;
- public:
- void log() const { ++callCount;} // 允许修改 mutable 成员
- };
mutable 突破了 const 的限制,但应谨慎使用,仅用于逻辑上“不变”的对象中的内部状态管理。
基本上就这些。const 的核心思想是“承诺不修改”,它贯穿于变量、函数、对象等多个层面,是编写高质量 C ++ 代码的重要 工具。掌握 const 的用法,能让代码更安全、清晰,并提升性能。不复杂但容易忽略细节。


