const本质是表达“不可修改性”的契约,贯穿变量、指针、函数参数、成员函数及返回值;正确使用可提升安全性、可读性与编译器优化能力。

const 在 C++ 中不只是“定义常量”那么简单,它本质是表达“不可修改性”的契约,贯穿变量、指针、函数参数、成员函数、返回值等各环节。用好 const 能提升代码安全性、可读性和编译器优化空间,也是专业 C++ 代码规范的重要体现。
const 变量与常量表达式
声明后不可修改的变量,必须初始化;若用于数组大小、模板非类型参数等场景,则需是编译期可知的常量表达式(constexpr 更严格):
- int const x = 42; // 等价于 const int x = 42;
- constexpr int N = 10; // 编译期常量,可用于 int arr[N];
- const int y; // ❌ 错误:未初始化
const 指针与指针 const —— 位置决定含义
const 修饰的是紧邻其**左侧**的类型(若左侧无类型,则修饰右侧),关键分清“指针本身不可变”还是“指针所指内容不可变”:
- int* const p1 = &x; // p1 不可改指向(指针 const),但 *p1 可改
- const int* p2 = &x; // *p2 不可改(内容 const),但 p2 可改指向
- const int* const p3 = &x; // 两者都不可改
const 成员函数:承诺不修改对象状态
在成员函数声明末尾加 const,表示该函数不会修改类的任何非 mutable 成员。这使 const 对象也能调用它,并支持 const 引用/指针调用:
立即学习“C++免费学习笔记(深入)”;
- int getValue() const { return val; } // ✅ 合法:只读访问
- void setValue(int v) { val = v; } // 非 const 函数
- void foo() const { val++; } // ❌ 错误:试图修改非 mutable 成员
- mutable int cache; // 可在 const 函数中修改
const 参数与返回值:明确接口契约
函数参数用 const 引用或指针,避免意外修改且避免拷贝开销;返回 const 值通常无意义(临时对象本就不能赋值),但返回 const 引用/指针可防止赋值或修改底层数据:
- void process(const std::string& s); // 推荐:安全 + 高效
- const std::string& getName() const; // 允许返回引用,禁止通过返回值修改
- const int getID() const; // 不推荐:const 返回值对内置类型无实际作用









