const是C++中表达不可修改语义与接口契约的关键字,用于修饰变量(需初始化)、指针(三种组合,口诀“左定值,右定址”)、成员函数(承诺不修改对象状态,可被const对象调用)、引用及参数(避免拷贝且保证只读)。

const 是 C++ 中用于声明“不可修改”的核心关键字,它不只表示“常量”,更关键的是表达接口契约和编译期约束。用对位置、理解作用域,才能写出安全、高效、易维护的代码。
const 修饰变量:值不可变
最基础用法,声明后不能通过该标识符修改值(编译期检查):
- int const x = 10; 或 const int x = 10; —— 等价,x 是只读整数
- 必须初始化:const int y; ❌ 报错;const int y = 5; ✅
- 底层内存未必只读(如 const_cast 可绕过),但逻辑上禁止修改,违反会引发未定义行为
const 修饰指针:三种常见组合
指针本身可变/不可变、指针所指内容可变/不可变,由 const 位置决定:
- int* const p1 = &a; —— 指针常量:p1 不能指向别处,但 *p1 可改
- const int* p2 = &a; 或 int const* p2 = &a; —— 常量指针:p2 可换指向,但 *p2 不可改
- const int* const p3 = &a; —— 指针和所指内容都不可变
- 口诀:“左定值,右定址”——const 紧邻 * 左边 → 所指内容不可变;const 紧邻 * 右边 → 指针本身不可变
const 成员函数:承诺不修改对象状态
加在成员函数声明末尾,表示该函数不会修改 this 指向对象的任何非 mutable 成员:
立即学习“C++免费学习笔记(深入)”;
- int getValue() const { return val; } —— 可被 const 对象调用,也可被非 const 对象调用
- const 对象只能调用 const 成员函数:const MyClass obj; obj.getValue(); ✅;obj.setValue(5); ❌(若 setValue 非 const)
- mutable 成员可在 const 函数中修改(常用于缓存、计数器等不影响逻辑状态的场景)
const 引用与 const 参数:避免拷贝 + 保证安全
函数参数中广泛使用 const 引用,兼顾效率与只读语义:
- void print(const std::string& s); —— 避免 string 拷贝,且函数内不能修改 s
- 接受字面量、临时对象:print("hello"); ✅(普通引用不允许绑定临时量)
- 返回 const 引用需谨慎:确保返回对象生命周期长于调用方,否则悬垂引用











