1

在编码时,我声明了以下内容:

const int a = 4;

“a”是编译器不允许我更改的变量吗?还是我需要 static const int a = 4?

谢谢!

4

3 回答 3

4

当您定义awith 时const int a = 4;,您不应该更改a,但编译器不需要阻止您这样做。如果您尝试a直接修改,编译器应该会生成一条诊断消息,例如 . a = 5;,但是您可以尝试修改a编译器不一定会捕获的其他方式,例如* (int *) &a = 5;. 如果您这样做,C 标准不会定义结果行为。添加static到定义中不会改变这一点。

于 2013-05-01T19:41:06.483 回答
2
const int a = 4; 

是编译器不允许您更改的变量。

static 限定符改变变量的行为方式。具体而言,这意味着变量在程序开始执行时被“分配”,并且仅在程序终止时被释放。特别是静态类变量保持其状态独立于实例化对象。函数中的静态变量在函数调用之间保持其状态。在这种情况下,全局常量上的静态限定符是多余的,仅用于确定内部/外部链接。

于 2013-05-01T19:00:16.080 回答
1

当您将 a 声明为 const 时,您不能修改它。

const int a = 5;
a = 6;

不编译(表达式必须是可修改的左值)。

于 2013-05-01T18:59:49.650 回答