常数如何表示?

时间:2014-08-27 09:35:33

标签: c++ c visual-studio-2010 visual-c++

我想知道变量是否被声明为volatile常量,是否可以使用i / o或任何外设进行更改? 例如: volatile const int input = 0; 这样的变量也可以存储在内存中吗?

2 个答案:

答案 0 :(得分:5)

当变量定义为const时,系统将其作为只读变量。不应修改其值的变量。但是,通过将变量定义为volatile,程序员会要求编译器避免编译器优化。

让我们举一个例子: volatile const int flag = 0;

它说flag是一个变量,其值不应被修改,并要求编译器避免编译器优化,这意味着建议编译器在其他系统运行期间可以更改flag的值过程

一个很好的例子是处理器中的PSW或CPSR(程序状态字)寄存器。它对用户是只读的(const的示例),并且只有在系统完成算术或逻辑操作时才能由系统修改(volatile的示例)。

我希望它有所帮助。

答案 1 :(得分:2)

完全取决于编译器,受相关标准引入的任何约束条件的限制。鉴于您可以获取常量的地址并将其分配给指针,您可以推测该常量占用该实例中的内存。

但这并没有真正暗示常量如何存储在内存中。如果这样做没有副作用,编译器可以完全优化它们。或者,const char* foobar = "foobar"const char* bar = "bar"甚至可能不占用不相交的位置:尝试修改(正式未定义的行为)将是灾难性的。使用volatile会抑制一些优化,但确切的行为仍然依赖于编译器。