1. const关键字的本质与作用
const是编程语言中用于定义常量的关键字,其核心特性是"编译期确定且不可修改"。与普通变量不同,const定义的常量在程序运行前就已经确定了值,这个值会被直接编译到程序中。以C++为例:
cpp复制const int MAX_SIZE = 100; // 正确的常量定义
MAX_SIZE = 200; // 编译错误!常量不可修改
const常量必须满足三个基本条件:
- 必须在定义时初始化(声明和赋值必须同时完成)
- 初始化表达式必须是编译时可确定的常量表达式
- 一旦定义后,任何修改操作都会导致编译错误
重要提示:const常量在C++中默认具有内部链接性(仅在当前文件可见),这与普通变量不同。如果需要跨文件使用,需要显式声明为extern const。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. const在不同语言中的实现差异
2.1 C/C++中的const
在C语言中,const实际上创建的是"只读变量"而非真正的常量。例如:
c复制const int n = 5;
int *p = (int*)&n; // 通过指针仍然可以修改(未定义行为)
*p = 10;
而在C++中,const才是真正的常量:
cpp复制const int n = 5;
int *p = const_cast<int*>(&n); // 未定义行为!
*p = 10;
2.2 Java中的final
Java使用final关键字实现类似功能:
java复制final int MAX = 100; // 基本类型常量
final List<String> names = new ArrayList<>(); // 引用类型常量
// names = new ArrayList<>(); // 错误!不能修改引用
names.add("Alice"); // 但可以修改对象内容
2.3 JavaScript中的const
ES6引入的const定义的是"不可重新赋值的绑定":
javascript复制const arr = [1, 2, 3];
arr.push(4); // 允许修改数组内容
arr = []; // 错误!不能重新赋值
