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