在阅读 stackoverflow 中的一些问题和答案时,我遇到了这个question
我试图理解它,但答案真的很难理解,尤其是像这样的术语
etc...
此外,我认为常数始终是常数(这是我在学校学到的)
请问有人可以让它变得容易理解一点吗?
在 C 中(与 C++ 不同),只有当表达式中的每个值都是数字常量或枚举值的名称时,算术表达式才是“常量表达式”。也就是说,尽管您可能已将变量声明为static const int
,您仍然不能在常量算术表达式中使用该(常量)变量。
注意,“常数表达式”是由定义C语言的正式标准定义的短语。还有其他一些直观上恒定的表达式,但它们没有包含在正式定义中。
具有“静态存储持续时间”的变量只是在程序执行过程中存在的变量。大多数此类变量是全局变量(即不是任何函数的一部分,甚至不是main
),但在 C 和 C++ 中你可以有static
函数作用域内的变量。这样的变量仅初始化一次,并且无论调用该函数多少次,都只存在它的单个实例。
全局变量和其他具有静态存储持续时间的变量只能根据上述定义初始化为常量表达式。情况是这样的是否他们是const
变量。问题很简单,变量具有静态存储持续时间,这意味着它们必须被初始化在程序执行之前。 (具有静态存储持续时间的变量在程序的整个执行过程中都存在,所以如果它是已初始化——也就是说,给定一个初始值,而不是在程序执行期间分配一个值——初始化必须在程序执行之前发生。)
在C++中,声明了一个变量static const
is被视为常量值,因此它可以出现在常量表达式中。然而,在 C 中,情况并非如此,因此 C 编译器不需要跟踪初始值static const
变量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)