1. C++中的const限定符基础解析
const限定符是C++中用于定义不可变对象的关键字。当我们在变量声明前加上const时,就创建了一个常量——这个变量的值在初始化后就不能再被修改。这种不可变性在编译阶段就会被检查,任何试图修改const变量的操作都会导致编译错误。
1.1 const的基本用法
最基本的const用法是定义常量变量:
cpp复制const int MAX_SIZE = 100;
MAX_SIZE = 200; // 编译错误:不能修改const变量
const变量必须在定义时初始化,因为之后就不能再给它赋值了:
cpp复制const double PI; // 错误:未初始化的const变量
const double PI = 3.14159; // 正确
const变量虽然自身不可修改,但可以用来初始化其他变量:
cpp复制const int BASE = 10;
int value = BASE * 2; // 完全合法
注意:在C++中,const默认具有内部链接性,这意味着在不同编译单元中定义的相同名称的const变量实际上是不同的实体。如果需要跨文件共享const变量,应该使用extern关键字。
1.2 const与类型系统
const是C++类型系统的重要组成部分。一个const int和普通的int被认为是不同的类型。这种类型区别在函数重载、模板实例化等场景中尤为重要。
cpp复制void func(int x) { /*...*/ }
void func(const int x) { /*...*/ } // 这是合法的重载,虽然通常不推荐
const的正确使用可以显著提高代码的安全性,因为它明确表达了哪些对象不应该被修改的意图,编译器会帮助我们强制执行这一约束。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. const与引用:不可变性的传递
引用在C++中是对象的别名,而const引用则在此基础上增加了不可修改的约束。理解const引用对于编写安全、高效的C++代码至关重要。
2.1 常量引用的基本行为
const引用可以绑定到常量或非常量对象,但都通过引用禁止修改:
cpp复制int x = 10;
const int& crx = x; // 合法:通过crx不能修改x
crx = 20; // 错误:不能通过const引用修改
const int y = 20;
const int& cry = y; // 合法
int& ry = y; // 错误:不能用非const引用绑定const对象
这种不对称性体现了C++的类型安全原则:我们不能通过"欺骗"编译器来绕过const约束。
