Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 常数是如何表示的?_C++_C_Visual Studio 2010_Visual C++ - Fatal编程技术网

C++ 常数是如何表示的?

C++ 常数是如何表示的?,c++,c,visual-studio-2010,visual-c++,C++,C,Visual Studio 2010,Visual C++,我想知道如果一个变量被声明为volatile常量,它可以使用I/o或任何外围设备进行更改吗? 例如: volatile const int输入=0; 这样的变量也可以存储在内存中的什么位置?这完全取决于编译器,受相关标准引入的任何约束。假设您可以获取常数的地址并将其分配给指针,那么您可以推测该常数在该实例中占用内存 但这并没有真正暗示常量是如何存储在内存中的。如果这样做没有副作用,编译器可以完全优化它们。或者,const char*foobar=“foobar”和const char*bar=“

我想知道如果一个变量被声明为volatile常量,它可以使用I/o或任何外围设备进行更改吗? 例如: volatile const int输入=0;
这样的变量也可以存储在内存中的什么位置?

这完全取决于编译器,受相关标准引入的任何约束。假设您可以获取常数的地址并将其分配给指针,那么您可以推测该常数在该实例中占用内存


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

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

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

它说
flag
是一个不应该修改其值的变量,并要求编译器避免编译器优化,这意味着编译器可以在其他系统进程的操作过程中更改flag的值

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


我希望这会有帮助。

你的问题不清楚。@pranitkothari不,只是太宽泛了。+1是的,这是。“建议编译器在其他系统进程的操作过程中可以更改flag的值”特别好。@AhmedNour请编辑您的问题并更具体,并添加详细信息以缩小答案集,以便提供最佳答案。问这样一个宽泛的问题是不好的,因为你会有多个好的答案,而且答案可能会偏离实际要求。这只是一个建议,因为你是新来的。