逗号运算符如何工作以及它有什么优先级?

2024-02-05

C++ 中的逗号运算符如何工作?

例如,如果我这样做:

a = b, c;  

a最终等于b还是c?

(是的,我知道这很容易测试 - 只需在这里记录一下,以便有人可以快速找到答案。)

Update:这个问题暴露了使用逗号运算符时的细微差别。只是为了记录这一点:

a = b, c;    // a is set to the value of b!

a = (b, c);  // a is set to the value of c!

这个问题实际上是由代码中的拼写错误引起的。本来的目的是什么

a = b;
c = d;

转换成

a = b,    //  <-  Note comma typo!
c = d;

逗号运算符有lowest所有 C/C++ 运算符的优先级。因此它总是最后一个绑定到表达式的,这意味着:

a = b, c;

相当于:

(a = b), c;

另一个有趣的事实是逗号运算符引入了序列点 http://en.wikipedia.org/wiki/Sequence_point。这意味着该表达式:

a+b, c(), d

保证有它的三个子表达式 (a+b, c() and d)按顺序评估。如果它们有副作用,这一点就很重要了。通常,编译器可以按照他们认为合适的任何顺序来计算子表达式;例如,在函数调用中:

someFunc(arg1, arg2, arg3)

参数可以按任意顺序求值。请注意,函数调用中的逗号是not运营商;他们是分隔符。

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

逗号运算符如何工作以及它有什么优先级? 的相关文章

  • 如何在 VC++ CString 中验证有效的整数和浮点数

    有人可以告诉我一种有效的方法来验证 CString 对象中存在的数字是有效整数还是浮点数吗 Use tcstol http msdn microsoft com en us library w4z2wdyc aspx and tcstod
  • Grpc - 将消息从一个客户端发送到连接到同一服务器的另一个客户端

    是否可以将消息从一个客户端发送到连接到同一服务器的另一个客户端 我想将数据从一个客户端发送到服务器然后发送到特定客户端 我想我需要获取客户端 ID 但我不知道如何获取此 ID 以及如何从服务器将此消息发送到该客户端 我这里有一个样本 这是一
  • 循环遍历 C 结构中的元素以提取单个元素的值和数据类型

    我有一个要求 我有一个 C 语言的大结构 由大约 30 多个不同数据类型的不同元素组成 typedef struct type1 element1 type2 element2 type3 element3 type2 element4 1
  • extern 声明和函数定义都在同一文件中

    我只是浏览了一下gcc源文件 在gcc c 我发现了类似的东西 extern int main int char int main int argc char argv 现在我的疑问是extern是告诉编译器特定的函数不在这个文件中 但可以
  • 强制初始化模板类的静态数据成员

    关于模板类的静态数据成员未初始化存在一些问题 不幸的是 这些都没有能够帮助我解决我的具体问题的答案 我有一个模板类 它有一个静态数据成员 必须为特定类型显式实例化 即必须专门化 如果不是这种情况 使用不同的模板函数应该会导致链接器错误 这是
  • 语音识别编程问题入门

    所以 你们可能都看过 钢铁侠 其中托尼与一个名为贾维斯的人工智能系统进行交互 演示剪辑here http www youtube com watch v Go8zsh1Ev6Y 抱歉 这是广告 我非常熟悉 C C 和 Visual Basi
  • 如何使用 ASP.NET Core 获取其他用户的声明

    我仍在学习 ASP NET Core 的身份 我正在进行基于声明的令牌授权 大多数示例都是关于 当前 登录用户的 就我而言 我的 RPC 服务正在接收身份数据库中某个用户的用户名和密码 我需要 验证是否存在具有此类凭据的用户 获取该用户的所
  • 如何将AVFrame转换为glTexImage2D使用的纹理?

    如您所知 AVFrame 有 2 个属性 pFrame gt data pFrame gt linesize 当我从视频 sdcard test mp4 android平台 读取帧后 并将其转换为RGB AVFrame副 img conve
  • 在 .NET MAUI 中实现 TouchTracking

    我一直致力于将我们的应用程序从 Xamarin Forms 迁移到 NET MAUI 我们的应用程序几乎没有绘图功能 用户可以用手指进行绘图 我们用了TouchTrackingXamarin Forms 中的 nuget 包 但与 NET
  • 如何递归取消引用指针(C++03)?

    我正在尝试在 C 中递归地取消引用指针 如果传递一个对象 那就是not一个指针 这包括智能指针 我只想返回对象本身 如果可能的话通过引用返回 我有这个代码 template
  • 模板外部链接?谁能解释一下吗?

    模板名称具有链接 3 5 非成员函数模板可以有内部链接 任何其他模板名称应具有外部链接 从具有内部链接的模板生成的实体与在其他翻译单元中生成的所有实体不同 我知道使用关键字的外部链接 extern C EX extern C templat
  • 在 C 中使用枚举而不是 #defines 作为编译时常量是否合理?

    在 C 工作了一段时间后 我将回到 C 开发领域 我已经意识到 在不必要的时候应该避免使用宏 以便让编译器在编译时为您做更多的工作 因此 对于常量值 在 C 中我将使用静态 const 变量或 C 11 枚举类来实现良好的作用域 在 C 中
  • 将 Word 转换为 PDF - 禁用“保存”对话框

    我有一个用 C 编写的 Word 到 PDF 转换器 除了一件事之外 它工作得很好 有时 在某些 Word 文件上 后台会出现一条消息保存源文件中的更改 gt 是 否 取消 但我没有对源文件进行任何更改 我只想从 Word 文件创建 PDF
  • 如何最好地以编程方式将 `__attribute__ ((unused))` 应用于这些自动生成的对象?

    In my makefile我有以下目标 它将文本 HTML 资源 编译 为unsigned char数组使用xxd i http linuxcommand org man pages xxd1 html 我将结果包装在匿名命名空间和标头保
  • 如何在 C# 中创建异步方法?

    我读过的每一篇博客文章都会告诉您如何在 C 中使用异步方法 但由于某些奇怪的原因 从未解释如何构建您自己的异步方法来使用 所以我现在有这段代码使用我的方法 private async void button1 Click object se
  • C++ 对象用 new 创建,用 free() 销毁;这有多糟糕?

    我正在修改一个相对较大的 C 程序 不幸的是 并不总是清楚我之前的人使用的是 C 还是 C 语法 这是在一所大学的电气工程系 我们 EE 总是想用 C 来做所有事情 不幸的是 在这种情况下 人们实际上可以逃脱惩罚 但是 如果有人创建一个对象
  • 如何解压 msgpack 文件?

    我正在将 msgpack 编码的数据写入文件 在编写时 我只是使用 C API 的 fbuffer 如 我为示例删除了所有错误处理 FILE fp fopen filename ab msgpack packer pk msgpack pa
  • 在 Win32 控制台应用程序中设置光标位置

    如何在 Win32 控制台应用程序中设置光标位置 最好 我想避免制作句柄并使用 Windows 控制台功能 我花了整个早上沿着那条黑暗的小巷跑 它产生的问题比它解决的问题还要多 我似乎记得当我在大学时使用 stdio 做这件事相对简单 但我
  • 无法将字符串文字分配给装箱的 std::string 向量

    这是我的类型系统的简化版本 include
  • 如何在 C 中将 char 连接到 char* ?

    我怎样才能前置char c to char myChar 我有c值为 A and myChar值为 LL 我怎样才能前置c to myChar使 ALL 这应该有效 include

随机推荐

  • 使用 Jackson 将消息从 JSON 反序列化为 POJO

    如果您在不检查消息的情况下不知道要使用什么类型的 POJO 那么如何使用 Jackson 将 JSON 文档反序列化为 POJO 有没有办法向 Jackson 注册一组 POJO 以便它可以根据消息选择一个 我试图解决的场景是通过线路接收
  • 如何在 Laravel 中将集合或自定义查询分页到 API json 中?

    我有一个复杂的查询 该查询不基于我想要对其输出进行分页的任何特定模型表 然而 Laravel 的内置分页依赖于模型和表格 如何对集合进行分页并使输出与 laravel 内置的分页输出格式匹配 我将其保存在 app Core Helpers
  • Rails 3:延迟加载与急切加载

    在 Rails 3 中 这些是相同还是不同 它们有何不同 o Appointment find 297 o service o Appointment includes service find 297 o service 我不确定 但看起
  • Scala Option 对象位于另一个 Option 对象内

    我有一个模型 其中有一些选项字段 其中包含另一个选项字段 例如 case class First second Option Second name Option String case class Second third Option
  • WiX,如何防止文件卸载,尽管我们忘记设置永久=“是”

    我们有一个用 Wix 创建的产品安装程序 其中包含一个程序包 V1 和一些配置文件 现在 我们将使用新的产品代码进行重大升级 其中旧版本的产品被卸载并且 V2 已安装 我们想要的是保存其中一个配置文件以防止卸载 因为 V2 也需要它 不幸的
  • R:深度复制函数参数

    考虑下面的代码 i 3 j i i 4 j i 然而 我想要的是 i 3 f lt function x j i x j i 4 f 4 16 but i want it to be 12 如果您想知道为什么我要这样做 您可以考虑这段代码
  • Java反射:如何从对象获取字段值,而不知道它的类

    比如说 我有一个返回自定义的方法List与一些物体 它们返回为Object大部头书 我需要从这些对象中获取某个字段的值 但我不知道这些对象的类 有没有办法通过反射或其他方式来做到这一点 假设一个简单的情况 你的领域是public List
  • 字形未加载

    由于某种原因 当我使用 twitter bootstrap 2 3 2 时 图像的图标未加载 我有默认结构 CSS 图像 js 其他一切都有效 我也尝试添加一个简单的图标 例如 span class icon icon ok OK span
  • RabbitMq - ConversationId 与 CorrelationId - 哪个更适合跟踪特定请求?

    RabbitMQ 似乎有两个非常相似的属性 我并不完全理解其中的区别 ConversationId and CorrelationId 我的用例如下 我有一个网站 可以生成Guid 该网站调用 API 将该唯一标识符添加到HttpReque
  • 类型错误:“builtin_function_or_method”对象没有属性“__getitem__”

    我有简单的python功能 def readMainTemplate templateFile template open templateFile r data template read index1 data index origin
  • 类型错误:无法读取反应中未定义的属性“减少”

    我有一个表单 要求用户输入几个字段的字段值 将字段值存储在状态中并以自定义格式显示状态值 所以 我有几个输入字段和一个提交按钮
  • 如何使用 Bash 脚本自动添加用户帐户和密码?

    我需要能够在 Linux Fedora 10 上创建用户帐户 并通过 bash 脚本 或其他方式 如果需要的话 自动分配密码 通过 Bash 创建用户很容易 例如 whoever server usr sbin useradd newuse
  • Angular 2中的zip文件上传问题

    当我尝试上传 zip 文件时 不幸的是它没有上传到服务器上 它给了我错误 有些事情发生了 这是我的代码 const event this fileEvent console log FileEvent gt event const file
  • 在开发容器中运行 VSCode 时如何打开本地终端?

    我正在使用 VSCode 从内部编写代码VSCode 容器 https code visualstudio com docs remote containers 我可以在开发容器内打开终端 https code visualstudio c
  • SHA256 哈希值有多长?

    我要跑SHA256密码 盐 但我不知道要花多长时间VARCHAR设置 MySQL 数据库时 什么是好的长度 正如其名称所示 sha256 的长度为 256 位 由于 sha256 返回十六进制表示 4 位足以编码每个字符 而不是 8 位 如
  • ActionBar 中的 XP 样式字形烦恼

    我不想问太多与组件外观相关的问题 但如今应用程序中的外观似乎同样重要 无论如何 请看下面的图片 两者都使用 TActionManager 和 TActionMainMenuBar 来创建我的主菜单 图像左侧的菜单使用平台默认样式 右侧的菜单
  • 交叉引用自定义引用类型

    我正在尝试将交叉引用添加到 SEQ 字段中 我的文档包含 点标题 这意味着在两个标题元素之间 用户可以添加扩展名 1 1 和 1 2 之间可能是 1 1A 1 1B 点标题代码如下所示 STYLEREF HEADING 2 N SEQ HE
  • 如何获取对象数组中布尔值的计数(如果为真)

    我必须获取对象数组中布尔值的计数 如果为真 json结构如下 id 5 name a select true id 3 name b select false id 2 name x select true id 1 name y sele
  • 将参数传递给 HTML 中的表单操作

    我正在尝试使用此处的文件实现简单的文件上传 http www sanwebe com 2012 05 ajax image upload and resize with jquery and php 我让它工作并设法通过 CSS 更改样式等
  • 逗号运算符如何工作以及它有什么优先级?

    C 中的逗号运算符如何工作 例如 如果我这样做 a b c a最终等于b还是c 是的 我知道这很容易测试 只需在这里记录一下 以便有人可以快速找到答案 Update 这个问题暴露了使用逗号运算符时的细微差别 只是为了记录这一点 a b c