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

2023-11-23

在阅读 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(使用前将#替换为@)

什么时候const被认为是真正的const? 的相关文章

随机推荐

  • 我需要一个事件来检测互联网连接/断开连接

    我们正在开发一个 NET 应用程序 其中的要求之一是监视系统是否连接到互联网 我们能够获得 以太网电缆断开连接 的 NET 事件 但如果重置调制解调器 则不会触发该事件 我不想继续 ping 某些 URL 来完成此操作 因为这会增加相当大的
  • 如何以编程方式阻止 Mac 进入睡眠状态?

    有没有办法使用 Objective C 以编程方式阻止 Mac 进入睡眠状态 Apple 开发网站上的 I O 套件基础知识部分告诉我 驱动程序会收到空闲 系统睡眠的通知 但我找不到阻止系统睡眠的方法 有可能吗 我遇到过一些使用 Caffe
  • 从下拉列表中复制选项列表。 jQuery

    网页代码
  • 如何在flutter中点击扩展卡片?

    我想立即实现材料设计卡片的行为 当我点击它时 它应该展开全屏并显示其他内容 新页面 我该如何实现它 https material io design components cards html behavior 我尝试使用 Navigato
  • detector.isOperational() 在 Android 上始终为 false

    我正在使用新的谷歌播放服务 条码检测器 对于这个海豚 我正在遵循本教程 https search codelabs appspot com codelabs bar codes 但是当我在真实设备 Asus Nexus 7 上运行该应用程序
  • 将 SVG 元素导出为 PDF?

    我有一个由 d3 生成的可视化 一个类似于 Protovis 或 Raphael 的 JavaScript 可视化库 它使用 SVG 元素绘制内容 vis 是交互式的 因此用户可以与其交互并对其进行编辑 一旦用户对他 她的可视化感到满意 我
  • 在 HTTPS 网站上嵌入 Youtube 时 Internet Explorer 出现警告?

    2011 年 3 月 22 日编辑 这个问题不再那么重要 因为 Youtube 现在提供 HTTPS 访问 http apiblog youtube com 2011 02 https support for youtube embeds
  • 将数字划分为(几乎)相等的整数的算法

    我遇到的情况是 我收到的发票电子表格包含跨越多个月的单行 其中数量列包含跨越所有月份的数量总和 为了运行逐月分析 我们需要将总量分成 n 行中的相等数量 其中 n 是跨度的月数 这些数字可能会相差一两个 但每个元素之间的差异越小越好 我用
  • 嵌套查询与连接

    如果我使用谁会更有效率nestted subquery JOINs或者可能temp tables 另一个问题 在子查询中 如果我对同一查询使用 IN 子句两次 它也应该执行两次 像这样 Select From X Where Exists
  • 如何转义 Hibernate HQL 中的保留字

    我使用以下查询来获取java util Map带索引id text and object Query q mySession createQuery SELECT u id AS id u name AS text u AS object
  • C++ 中的迭代器类别如何工作?

    我试图理解迭代器的实现 在研究源代码时 我看到了这样的语句 typedef output iterator tag iterator category 我不明白这个 typedef 在类中如何工作 它有什么副作用 有人可以引导我完成这个吗
  • 如何将 Pandas 数据框中的多个列值连接到单个列中

    这个问题与此贴早些时候 我想连接三列而不是连接两列 这是组合两列 df DataFrame foo a b c bar 1 2 3 new apple banana pear df combined df apply lambda x s
  • Python 中的半正矢公式(两个 GPS 点之间的方位角和距离)

    Problem 我想知道如何获取两个 GPS 点之间的距离和方位 我已经研究过半正矢距离 有人告诉我 我也可以使用相同的数据找到轴承 一切工作正常 但轴承尚未完全正常工作 轴承输出负值 但应在 0 360 度之间 设定的数据应使水平方位96
  • 将依赖项注入 IErrorHandler 实现

    我正在实施IErrorHandler为了将我的 WCF 服务的所有错误处理集中在一处 这工作得相当好 public class ServiceErrorHandler IErrorHandler public bool HandleErro
  • 如何修复损坏的表

    我有mysql表称为Sample 我已经编辑了文件 var lib mysql Sample MYI具有一些价值观 现在检查表示例查询显示为 表 Sample 的密钥文件不正确 尝试修复它 为了修复这个问题 我尝试使用以下命令myisamc
  • 如何使用 lxml 更新 XML 文件

    我想使用 lxml 库用新信息更新 xml 文件 例如 我有这样的代码 gt gt gt from lxml import etree gt gt gt gt gt gt tree etree parse books xml 其中 book
  • UIDocumentInteractionController 打开菜单取消回调

    我目前正在开发一个专门针对 iOS7 的应用程序 该应用程序利用在菜单中打开的 UIDocumentInteractionController 并需要一种方法来在用户取消且未选择可用选项时通知我 UIDocumentInteractionC
  • 如何为所有提交移动 Git 存储库中的目录?

    假设我有一个包含以下目录结构的存储库 repo blog posts some post html another file txt 我想搬家 posts到存储库的顶层 因此结构将如下所示 repo posts some post html
  • 具有自定义基础集合的 Linq

    我经常发现 linq 在使用自定义集合对象时存在问题 他们经常被辩解为 基础集合 abstract class BaseCollection
  • 什么时候const被认为是真正的const?

    在阅读 stackoverflow 中的一些问题和答案时 我遇到了这个question 我试图理解它 但答案真的很难理解 尤其是像这样的术语 静态存储时间 在翻译阶段无法评估表达式 etc 此外 我认为常数始终是常数 这是我在学校学到的 请