常数如何表示? [关闭]

Posted

技术标签:

【中文标题】常数如何表示? [关闭]【英文标题】:How is constant represented? [closed] 【发布时间】:2014-08-27 09:35:33 【问题描述】:

我想知道一个变量是否被声明为 volatile 常量,是否可以使用 i/o 或任何外围设备来更改它? 例如: 易失性常量 int 输入 = 0; 这样的变量也可以存储在内存的什么地方?

【问题讨论】:

你的问题不清楚。 @pranitkothari 不,它太宽泛了。 【参考方案1】:

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

举个例子: volatile const int flag = 0;

上面写着flag是一个变量,它的值不应该被修改,并要求编译器避免编译器优化,意思是暗示编译器可以在运行过程中被其他系统进程改变flag的值。

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

希望对你有帮助。

【讨论】:

+1 是的。 “建议编译器在运行过程中可以被其他一些系统进程改变flag的值”特别好。 @AhmedNour 请编辑您的问题并更加具体并添加详细信息以缩小答案集,以便提供最佳答案。问这样一个广泛的问题并不是一个好习惯,因为您将有多个好的答案和可能偏离实际要求的答案。 只是一个建议,因为您是 SO 新手。【参考方案2】:

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

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

【讨论】:

以上是关于常数如何表示? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

求:WPF中TreeView如何实现展开一个节点其他节点关闭!

如何检查整数是偶数还是奇数? [关闭]

如何表示这个基本表达式? [关闭]

如何表示磁盘中的文件[关闭]

带有肤色的表情符号如何在内部表示? [关闭]

如何表示一个数组 [100000][100000] 在 C++ 中只存储 0 或 1? [关闭]