2013-05-01 80 views
1

当我编码的变量,我声明如下:声明存储类

const int a = 4; 

为“A”的变量,编译器不会让我改变?或者我会需要静态const int a = 4?

谢谢!

回答

1

当你声明它为const时,你不能修改它。

const int a = 5; 
a = 6; 

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

+1

不完全正确。你可以用编译器不会捕获的方式通过指针间接修改它。 – 2013-05-01 19:48:12

2
const int a = 4; 

是编译器不会让你改变的变量。

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

+3

什么是“类变量”? (问题标记为c,而不是C++。) – 2013-05-01 19:05:00

+1

在C中,全局常量上的静态限定符也不是多余的。 – 2013-05-01 19:44:13

+0

我想在C中看到关于“全局常量”的章节和经文。 – 2013-05-01 19:44:35

4

当你定义aconst int a = 4;,你不应该变化a,但不是必需的编译器,以防止你这样做。如果您尝试直接修改a(如a = 5;),编译器应生成诊断消息,但还有其他方法可以尝试修改a编译器不一定会捕获的内容,例如* (int *) &a = 5;。如果你这样做,C标准没有定义结果行为。添加static到定义不会改变这一点。

+0

好的指出,它不能保证。它不是变量上的写保护选项卡,就像您可能希望的那样。 – 2013-05-01 19:43:51