贝利信息

C++中的const关键字如何使用?(详细解读)

日期:2025-12-30 00:00 / 作者:穿越時空
const是C++编译期约束工具,参与类型系统、函数重载、对象生命周期及内存安全;用错会导致编译失败、隐式拷贝、接口不可调用或未定义行为。

const 在 C++ 中不是简单的“只读修饰符”,而是一个编译期约束工具,它参与类型系统、影响函数重载、决定对象生命周期,并直接关系到内存安全和接口设计。用错 const 可能导致编译失败、隐式拷贝开销、无法调用关键接口,甚至引发未定义行为。

const 修饰变量:值不可变,但不等于常量表达式

声明为 const 的变量在初始化后不能被修改,但它不一定是编译期常量(即不一定能用在需要常量表达式的地方):

注意:const int*int const*int* const 含义完全不同——前者指针所指内容不可改,后者指针本身不可改(地址固定)。

const 成员函数:承诺不修改对象逻辑状态

在成员函数声明末尾加 const(如 void print() const;),表示该函数不会通过 this 指针修改对象的任何非 mutable 成员。这是 const 正确性(const-correctness)的核心:

例如:class Data { mutable int cache_valid; mutable std::string cached_str; }; 允许在 const get_string() 中更新缓存。

const 引用与 const 指针:延长临时对象生命周期 & 安全绑定

const T& 是 C++ 中极重要的惯用法:

对比:T& 只能绑定到左值;T&& 绑定右值;只有 const T& 能通吃两者并延长临时对象生命。

const 与函数重载、模板推导、返回值设计

const 影响接口的精细控制:

不复杂但容易忽略。