在编码时,我声明了以下内容:
const int a = 4;
“a”是编译器不允许我更改的变量吗?还是我需要 static const int a = 4?
谢谢!
当您定义a
with 时const int a = 4;
,您不应该更改a
,但编译器不需要阻止您这样做。如果您尝试a
直接修改,编译器应该会生成一条诊断消息,例如 . a = 5;
,但是您可以尝试修改a
编译器不一定会捕获的其他方式,例如* (int *) &a = 5;
. 如果您这样做,C 标准不会定义结果行为。添加static
到定义中不会改变这一点。
const int a = 4;
是编译器不允许您更改的变量。
static 限定符改变变量的行为方式。具体而言,这意味着变量在程序开始执行时被“分配”,并且仅在程序终止时被释放。特别是静态类变量保持其状态独立于实例化对象。函数中的静态变量在函数调用之间保持其状态。在这种情况下,全局常量上的静态限定符是多余的,仅用于确定内部/外部链接。
当您将 a 声明为 const 时,您不能修改它。
const int a = 5;
a = 6;
不编译(表达式必须是可修改的左值)。