C 中常量表达式的详细内容是什么?

2024-03-04

C 定义了至少 3 个级别的“常量表达式”:

  • 常量表达式(非限定)
  • 算术常量表达式
  • 整型常量表达式

6.6 第 3 段如下:

常量表达式不得包含赋值、递增、递减、函数调用、 或逗号运算符,除非它们包含在不存在的子表达式中 评价。

那么这是否意味着1,2不是常量表达式吗?

第 8 段内容如下:

算术常量表达式应具有算术类型并且仅具有 操作数为整型常量、浮点常量、枚举常量、字符 常量和 sizeof 表达式。算术常量表达式中的强制转换运算符 只能将算术类型转换为算术类型,除非作为操作数的一部分 sizeof 运算符,其结果是整数常量。

中的操作数是什么(union { uint32_t i; float f; }){ 1 }.f? If 1是操作数,那么这可能是一个算术常量表达式,但是如果{ 1 }是操作数,那么显然不是。

Edit:另一个有趣的观察:7.17 第 3 段要求的结果offsetof是类型的整型常量表达式size_t,但是标准实现offsetof据我所知,标准并不要求必须是整数常量表达式。这当然没问题,因为允许实现(根据 6.6 第 10 段)接受其他形式的常量表达式,或者实现offsetof宏为__builtin_offsetof而不是通过指针减法。然而,这个观察的本质是,如果你想使用offsetof在需要整数常量表达式的上下文中,您确实需要使用实现提供的宏,而不是自己推出宏。


根据您的阅读,1,2不是一个常量表达式。我不知道为什么不是,只是我同意你的观点,它不是(尽管事实上它可能应该是)。

6.5.2 指定复合文字作为后缀运算符。所以在

(union { uint32_t i; float f; }){ 1 }.f

操作数是(union { uint32_t i; float f; }){ 1 } and f to the .操作员。它不是算术常量表达式,因为第一个参数是union类型,但它是一个常量表达式。

UPDATE:我的这一点是基于对标准的不同解释。

我之前的推理是(union { uint32_t i; float f; }){ 1 }.f满足常量表达式的标准,因此是常量表达式。我仍然认为它符合常量表达式的标准(6.6 第 3 段),但它不是常量表达式的任何标准类型(整数、算术或地址),因此仅受 6.6 段约束为常量表达式10,它允许实现定义的常量表达式。

我也一直想得到你的编辑。我要说的是“黑客”实施offsetof是一个常量表达式,但我认为它与上面相同:它满足常量表达式(可能还有地址常量)的标准,但不是整数常量表达式,因此在 6.6 第 10 段之外无效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C 中常量表达式的详细内容是什么? 的相关文章

  • -ffast-math 可以安全地用于典型项目吗?

    在回答我建议的问题时 ffast math 有评论指出这是危险的 我个人的感觉是 在科学计算之外 是可以的 我还假设严肃的金融应用程序使用定点而不是浮点 当然 如果你想在你的项目中使用它 最终的答案是在你的项目上测试它 看看它有多大影响 但
  • 处理器关联组 C#

    我使用的是 72 核的 Windows Server 2016 我看到有两组处理器 我的 net 应用程序将使用一个或其他组 我需要能够强制我的应用程序使用我选择的组 我看到下面的代码示例 但我无法使其工作 我可能传递了错误的变量 我希望应
  • 为类型列表创建别名并将其作为模板参数传递

    我正在使用可变参数模板来实现访问者模式 template
  • 二叉树和快速排序?

    我有一个家庭作业 内容如下 别生气 担心 我是not请你帮我做作业 编写一个程序 通过使用二分查找的快速排序方法对一组数字进行排序 树 推荐的实现是使用递归算法 这是什么意思 到目前为止 这是我的解释 正如我在下面解释的那样 我认为两者都有
  • 如何在建立上下文时设置连接超时-PrincipalContext

    using PrincipalContext ctx new PrincipalContext ContextType Domain Domain UserName Password UserPrincipal U new UserPrin
  • 使用c#在mac上启动外部进程

    我成功地使用 System Diagnostics Process Start 在 Windows 上启动我的外部单声道可执行文件 然而在mac上却失败了 我没有收到任何错误 只是什么也没发生 我尝试按以下方式进行操作 System Dia
  • R 包与 Rcpp 的链接错误:“未定义符号:LAPACKE_dgels”

    我正在创建一个 R 包 lapacker 以使用 R API 头文件 R ext Lapack h 为 R 提供和使用的内部 LAPACK 库 仅具有双精度和双复数 提供 C 接口 源代码 https github com ypan1988
  • 我应该使用字节还是int?

    我记得曾在某处读到 即使您只需要字节 使用 Int32 更好 就性能而言 它 据说 仅适用于您不关心存储的情况 这是有效的吗 例如 我需要一个保存一周中某一天的变量 我是吗 int dayOfWeek or byte dayOfWeek E
  • 如何在 C++11 中返回类成员向量

    我读了几篇关于如何从方法返回向量的文章 其中包括 c11 右值和移动语义混淆返回语句 https stackoverflow com questions 4986673 c11 rvalues and move semantics conf
  • 将 JavaScript 引擎嵌入到 .NET 中 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 只是想知道是否有人尝试过将任何 js 引擎嵌入并实际集成到 net 环境中 我可以找到并实际使用 经过L
  • 绑定集合的子集

    我有一个ObservableCollection
  • 来自同一基模板类的 C++ 重写函数,具有多重继承不明确的函数调用

    我需要打电话init int iNumber 从基类派生的函数 基类 h pragma once include stdafx h template
  • 如何在C++中列出Python模块的所有函数名称?

    我有一个 C 程序 我想导入一个 Python 模块并列出该模块中的所有函数名称 我该怎么做 我使用以下代码从模块中获取字典 PyDictObject pDict PyDictObject PyModule GetDict pModule
  • 对列表中的一系列整数求和

    假设我有一个这样的列表 List
  • 批量插入,asp.net

    我需要获取与会员相对应的 ID 号列表 在任何给定时间处理的数量可能在 10 到 10 000 之间 我可以毫无问题地收集数据 解析数据并将其加载到 DataTable 或任何内容 C 中 但我想在数据库中执行一些操作 将所有这些数据插入表
  • 如何通过分解 y 轴来减小 mschart 的高度

    如何降低 mschart 的高度 如下所示 编辑 就我而言 我不想查看中断图表 this chart1 ChartAreas 0 AxisY ScaleBreakStyle Enabled false 您似乎正在寻找AxisY ScaleB
  • 括号内声明的对象的范围

    如果我声明一个这样的对象 void main myclass objectA anotherclass true true 0 即 我通过直接调用后者的构造函数来创建一个 objectA 和另一个对象 anotherclass anothe
  • ArrayList 有什么问题?

    最近我问了一个关于 SO 的问题 其中提到了可能使用 c ArrayList 来解决问题 有人评论说使用数组列表不好 我想了解更多有关此的信息 我以前从未听说过关于数组列表的这种说法 有人可以带我了解使用数组列表可能出现的性能问题吗 C n
  • 模板类中模板方法专门化的 clang 自动返回类型错误?

    试图理解另一个问题 https stackoverflow com questions 38054055 clang fails to compile template function with auto return type insi
  • 使用属性和性能

    我正在优化我的代码 我注意到使用属性 甚至自动属性 对执行时间有深远的影响 请参阅下面的示例 Test public void GetterVsField PropertyTest propertyTest new PropertyTest

随机推荐

  • 类型错误:“in ”需要字符串作为左操作数,而不是列表(函数)

    variableName display screen sound audio fileName PPP Abc P1 PPP d display s screen ss sound a audio d P1 loop True def C
  • 为什么我不能从下一个日期周期中减去一个日期周期并转换为整数?

    我试图确定两个月之间的差异是偶数还是奇数月份 我使用了命令 import pandas as pd pd to datetime 2019 01 01 to period M pd to datetime 2018 08 01 to per
  • 使用 xlrd 和 xlwt 编辑现有 Excel 工作簿和工作表

    In the 文档 http www simplistix co uk presentations python excel pdf for xlrd and xlwt我学到了以下内容 如何阅读现有的工作簿 工作表 from xlrd im
  • .gitattributes 在 Mac 和 Windows 上无法正常工作

    在我的项目中 我使用具有不同操作系统的计算机 一个是 Mac 第二个是 Windows 当我使用 git 时 每个更改都会显示为整个文档更改 原因是这两个操作系统中的行尾不同 我读了这个https help github com artic
  • 如何使用Struts 2和Hibernate维护会话?

    我需要知道如何维护一种形式和多种形式的会话input Name City Country 使用Struts2 最后数据将使用Hibernate存储到数据库 该表单有两个按钮 add 存储到会话 Submit 存储到数据库 首先 输入表格详细
  • GAE:memcache:在多个应用程序实例中是否相同

    我有一个非常基本的问题 在 GAE 中 如果我使用 memcache 来存储第一次从数据库检索到的一些数据 如果该数据在缓存中保留大约 2 天 那么所述应用程序的所有实例都会得到 查看 它并从缓存中检索它 或者每个应用程序实例的缓存是独立的
  • 滚动到模式窗口内的元素

    我有一个模式窗口 需要能够打开模式 然后将用户滚动到模式中的特定位置 我正在使用 AJAX 将模态内容获取到 PHP 脚本 例如 mypage php loc someid 在 PHP 脚本中 我有这个 JS 来执行滚动 document
  • URI 中的方案是可选的吗?

    最近 我被要求向网站添加一些 Woopra JavaScript 并注意到 URL 以双斜杠开头 即省略了方案 我以前从未见过这个 所以我试图了解更多信息 但我唯一能找到的是Woopra 常见问题解答中的一个项目 http www woop
  • Travis 无法构建 Android 项目,没有 local.properties

    事情是这样的 我已经在 Travis CI 上构建了我的项目好几次了 但每次都会遇到同样的问题 错误日志 What went wrong A problem occurred evaluating root project LiteRead
  • Eclipse 在 Ctrl-S 上跳转到函数名称

    当我按 Ctrl S 将 Java 文件保存在 Eclipse 中时 它会跳转到函数名称 这很烦人 有人知道该怎么办吗 转到 窗口 gt 首选项 gt 常规 gt 按键 您也可以搜索Keys在主首选项窗口中 您很可能添加了一个绑定 当您按下
  • 创建圆形鼠标悬停饱和效果

    我有两个版本的图像 去饱和版本和全彩版本 我想要实现的是悬停效果 其中将鼠标悬停在去饱和图像上会显示图像的彩色版本的圆圈 这有点像将聚光灯照射在饱和度降低的图像上以显示其颜色 然后 当您将鼠标移开时 它会淡回到不饱和状态 我知道我可能可以使
  • 如何扩展 OAuth2 主体

    我们正在开发一个将 OAuth 2 用于两个用例的应用程序 访问后端微服务 使用client credentials 验证应用程序的用户 使用authorization code 因此将用户重定向到 Keycloak 进行登录 大致配置如下
  • 新手入门:ruby 中的实例变量?

    请原谅这个新手问题 但为什么 game score 总是为零 bowling rb class Bowling game score 0 def hit pins game score game score pins end def sco
  • 如何在Python中调用同一类的不同实例?

    我是Python新手 我正在 SimPy 中编写一个模拟来对生产线进行建模 如下所示 机器 1 gt 缓冲区 1 gt 机器 2 gt 缓冲区 2 gt 等等 我的问题 我有一个类 Machine 其中有多个实例 假设当前实例是机器 2 该
  • 如何在 Google App Engine 上用 Python 解析 xml

    为了这以下 XML http www boardgamegeek com xmlapi boardgame 13 如何获取 xml 然后解析它以获取值
  • 使用 fscanf() 与 fgets() 和 sscanf()

    在 实用 C 编程 一书中 我发现结合了fgets and sscanf 用于读取输入 然而 在我看来 仅使用以下方法就可以更轻松地实现相同的目标fscanf 功能 来自书中 想法 而不是示例 int main int age weight
  • HighCharts 动态改变图表类型

    在 ASP NET 站点中使用 HighCharts 2 2 3 看http jsfiddle net wergeld TDLvc http jsfiddle net wergeld TDLvc 代码示例 我的网站设置与 jsFiddle
  • 核心数据 NSManagedObject - 跟踪属性是否更改

    我有一个对象 Config 我想知道是否Account属性上Config已经改变 当这种情况发生时 我想发送一个NSNotification这样所有关心何时的代码Account变化就会知道 我最初的想法是在我的NSManagedObject
  • 哈希映射宏拒绝类型检查,失败并出现误导性(并且看似有缺陷)的错误消息?

    我这里有这两个相关的宏 macro export macro rules hash map key expr gt value expr gt use std iter FromIterator std collections HashMa
  • C 中常量表达式的详细内容是什么?

    C 定义了至少 3 个级别的 常量表达式 常量表达式 非限定 算术常量表达式 整型常量表达式 6 6 第 3 段如下 常量表达式不得包含赋值 递增 递减 函数调用 或逗号运算符 除非它们包含在不存在的子表达式中 评价 那么这是否意味着1 2