用逗号进行相互依赖的初始化?

2023-11-25

以下是完美定义的:

int x = 42, y = x;

即严格等同于:

int x = 42;
int y = x;

编辑:问题不是关于风格(我知道这是错误的......),问题是“理论”


正确答案是

int x = 42, y = x;

and

int x = 42;
int y = x;

通常是等价的(不严格)。


考虑到标准§ 8 声明符 [dcl.decl]:

3声明中的每个初始化声明符都会被单独分析,就像它本身在声明中一样。

并在脚注[100]中进一步解释:

具有多个声明符的声明通常等价于相应的声明序列,每个声明序列都有一个声明符 声明者。那是

T D1、D2、...Dn;

通常相当于

D1; D2; ... T Dn;

其中 T 是一个 decl-specifier-seq,每个 Di 是一个 init-declarator。

  • 以上保证了x = 42 and y = x将单独评估。然而,作为@禁卫军评论中正确指出,脚注不规范。

  • 这意味着评估的顺序没有明确定义,实现者也可以以相反的顺序实施声明的评估(即,T Dn; ...T D2; T D1;).

  • 有人可能会争辩说,逗号运算符可以保证从左到右的计算。然而,事实并非如此。根据 K & R [K & R II, 3.6 p.63],这也适用于 C++:

分隔函数参数、声明中的变量等的逗号不是逗号运算符,并且不保证从左到右计算。

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

用逗号进行相互依赖的初始化? 的相关文章

  • “构建”构建我的项目,“构建解决方案”则不构建

    我刚刚开始使用VS2010 我有一个较大的解决方案 已从 VS2008 成功迁移 我已将一个名为 Test 的控制台应用程序项目添加到解决方案中 选择构建 gt 构建解决方案不编译新项目 选择构建 gt 构建测试确实构建了项目 在失败的情况
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • 为什么两个不同的 Base64 字符串的转换会返回相等的字节数组?

    我想知道为什么从 base64 字符串转换会为不同的字符串返回相同的字节数组 const string s1 dg const string s2 dq byte a1 Convert FromBase64String s1 byte a2
  • 在结构中使用 typedef 枚举并避免类型混合警告

    我正在使用 C99 我的编译器是 IAR Embedded workbench 但我认为这个问题对于其他一些编译器也有效 我有一个 typedef 枚举 其中包含一些项目 并且我向该新类型的结构添加了一个元素 typedef enum fo
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

    我正在使用 NUNIT 在 Visual Studio 中使用 Selenium WebDriver 测试用例的代码是 我想在执行测试用例后立即在变量中记录测试用例通过或失败的情况 我怎样才能实现这一点 NUnit 假设您使用 NUnit
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags

随机推荐

  • 如何从 VBScript 调用 C# DLL 函数

    我的脚本位于服务器上 因此我没有可用的 UI 交互 必须使用 DLL 而不是控制台应用程序 如何从 VBScript 调用 C DLL 中的函数 我如何使我的DLL成为COMVisible 我必须注册吗 您需要通过设置将您的程序集标记为 C
  • JQuery ajax() 获取 xml 响应文本

    我正在尝试从 Gmail API 检索一些 XML 到目前为止我有这个 ajax url https mail google com mail feed atom success function data console log data
  • 控制 Java 应用程序中的音量

    我对java相当陌生 我需要在java应用程序中控制音量 音量增大 减小 静音 我找不到办法做到这一点 我正在Linux系统上进行开发 仅供参考 我厌倦了这段代码 Java代码 Port lineIn FloatControl volCtr
  • JavaScript 可以在 window.open 上设置 mime 类型吗

    我正在尝试在 Javascript 中打开一个调试窗口 Javascript 将向调试窗口传递一个 JSON 字符串 其中JSONView Chrome 扩展 应该以格式良好的方式显示 为此 MIME 类型必须是 application j
  • 将 MembershipProvider 注入 ASP.NET MVC AccountController

    ASP NET MVC 1 0 项目模板包括AccountController类 支持构造函数注入 public AccountController IFormsAuthentication formsAuth IMembershipSer
  • Java RMI - 将客户端变成服务器

    如果我想在我的 RMI 应用程序中启用 双向 通信 即允许服务器调用客户端上的方法 以及允许客户端调用服务器上的方法 最简单的方法就是让客户端进入还有远程课程吗 另外 如果我打算将客户端实例作为方法参数传递给服务器 我认为不需要将 客户端类
  • 如何让 Grails 从 Maven 存储库获取最新的本地 jar?

    在我的 Maven 存储库 m2 中 我本地有一个像 sub app 0 1 jar 这样的 jar 我在常春藤缓存中有相同的副本 I run maven install在 sub app 上创建新的 sub app 0 1 jar 文件
  • Resque-Scheduler 无法与 Rails 4.2 中的 ActiveJob 配合使用

    有人能够在 Rails 4 2 中获得预定的工作吗 我正在使用 resque 并且尝试使用 resque scheduler 来安排作业 我有一个已加载的时间表 并且调度程序正在运行 甚至看起来它正在运行作业 但它没有执行任何操作 resq
  • 像聊天一样带有三角形的盒子

    我想用 CSS 制作一个矩形框 后面跟着一个小三角形 就像this 我已经做到了 但我想要与 after 相同的输出 我已经尝试过 但无法打印任何内容 p display inline block padding 5px 6px 8px 6
  • 在 MVC 4 中从数据库填充 Select2 下拉框

    我需要帮助编写 jquery ajax 来填充Select2下拉框 对于那些不知道什么的人Select2是的 它是一个 JavaScript 扩展 用于为 html 选择列表下拉框提供 Twitter Bootstrap 外观和搜索 提前输
  • iPhone:AVCaptureSession 捕获输出崩溃(AVCaptureVideoDataOutput)

    我正在捕获视频并将其转换为 CGImage 以对其进行处理 它将工作约 10 秒 收到内存警告 然后崩溃 通常表示数据格式化程序暂时不可用 有人可以帮我解决这个问题吗 void captureOutput AVCaptureOutput c
  • Mesh 在 Three.js 中突然消失了。剪裁?

    设想 在我的场景中 我实现了一个顶点着色器 它将平面网格放置在相机位置的 xz 轴上 因此 如果相机移动 平面网格也会随之移动 这会产生这样的视觉效果 在移动相机时 平面网格似乎保持固定在原位 这似乎工作正常 Problem 如果我将相机
  • 从 List 转换为 List> 是否安全?

    If you have a raw type in Java you can safely assign cast this to the same type with an unbounded wildcard For example a
  • 将 SQLite 请求中的 strftime 转换为 MySQL

    我转换了 SQLite 行 WHERE strftime d m orders created at 直接到 MySQL 怪物 WHERE CONCAT CAST DAY orders created at AS CHAR LPAD CAS
  • 使用 VBA 关闭 Excel 应用程序

    我使用了以下内容但没有成功 实际上 活动工作簿已关闭 但 Excel 窗口仍保持打开状态 Application ActiveWindow Close SaveChanges False ActiveWorkbook Close SaveC
  • 我可以将 Grunt 与 TFS 一起使用吗?

    我的新项目需要我使用 TFS Git 坦白 我对TFS一无所知 我想为我的 JavaScript 项目设置一个构建 我想使用咕噜 这可能吗 有人用过 Grunt 和 TFS 吗 在我们当前的项目中 我们使用 Grunt 和 TFS 我通过从
  • 使用 CSS 功能/功能检测来检测 IE 版本

    IE10 不再支持浏览器检测标签来识别浏览器 为了检测 IE10 我使用 JavaScript 和能力测试技术来检测某些ms前缀样式定义如下msTouchAction and msWrapFlow 我想对 IE11 执行同样的操作 但我假设
  • 使用 urllib.request 验证 HTTPS 证书

    我正在尝试使用以下命令打开 https URLurlopenPython 3 中的方法urllib request模块 它似乎工作正常 但文档警告说 i 如果两者都没有cafile nor capath指定后 HTTPS 请求不会对服务器的
  • 无法编译 lex 的输出

    当我尝试编译这个简单的 lex 程序的输出时 lex l integer printf found keyword INT using gcc lex yy c I get Undefined symbols yywrap referenc
  • 用逗号进行相互依赖的初始化?

    以下是完美定义的 int x 42 y x 即严格等同于 int x 42 int y x 编辑 问题不是关于风格 我知道这是错误的 问题是 理论 正确答案是 int x 42 y x and int x 42 int y x 通常是等价的