gpt4 book ai didi

c - 什么时候 const 被认为是真正的 const?

转载 作者:太空狗 更新时间:2023-10-29 15:00:28 25 4
gpt4 key购买 nike

在阅读 stackoverflow 中的一些问题和答案时,我遇到了这个 question

我试图理解它,但答案真的很难理解,尤其是像

这样的术语
  • 静态存储时长

  • 翻译阶段无法计算表达式

等...

除此之外,我认为常数永远是常数(这是我从学校学到的)

有人可以让它更容易理解吗?

最佳答案

在 C 中(与 C++ 不同),只有当表达式中的每个值都是数字常量或枚举值的名称时,算术表达式才是“常量表达式”。也就是说,尽管您可能已将变量声明为 static const int,但您仍然不能在常量算术表达式中使用该(常量)变量。

请注意,“常量表达式”是由定义 C 语言的正式标准定义的短语。还有一些直觉上不变的表达式,但它们不包含在正式定义中。

具有“静态存储持续时间”的变量只是在整个程序执行过程中存在的变量。大多数此类变量都是全局变量(即不是任何函数的一部分,甚至不是 main),但在 C 和 C++ 中,您可以在函数范围内拥有一个 static 变量.这样的变量只被初始化一次,并且无论函数被调用多少次,它都只存在一个实例。

全局变量和其他具有静态存储持续时间的变量,只能根据上述定义初始化为常量表达式。 无论是否它们都是 const 变量,情况都是如此。问题很简单,变量具有静态存储持续时间,这意味着它们必须在程序执行之前初始化。 (具有静态存储持续时间的变量存在于整个程序的执行过程中,因此如果它被初始化——也就是说,给定一个初始值,而不是在程序执行期间被赋值——初始化必须在程序执行之前发生。)

在 C++ 中,声明为 static const 的变量被视为常量值,因此它可以出现在常量表达式中。然而,在 C 中,情况并非如此,因此 C 编译器不需要跟踪 static const 变量的初始值。

关于c - 什么时候 const 被认为是真正的 const?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27574399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com