首页 / 知识
关于c ++:逗号运算符如何工作
2023-04-14 19:59:00

How does the Comma Operator work逗号运算符如何在C ++中工作? 例如,如果我这样做:
最终是否等于b或c? (是的,我知道这很容易测试 - 只是在这里记录,以便有人快速找到答案。) 更新:此问题在使用逗号运算符时暴露了细微差别。 只是记录下来:
这个问题实际上是受到代码中的拼写错误的启发。 打算做什么
转换成
请注意,逗号运算符可能在C ++中过载。因此,实际行为可能与预期的行为非常不同。 例如,Boost.Spirit非常巧妙地使用逗号运算符来实现符号表的列表初始值设定项。因此,它使以下语法成为可能且有意义:
请注意,由于运算符优先级,代码(故意!)相同
也就是说,第一个被调用的运算符是
逗号运算符具有所有C / C ++运算符的最低优先级。因此,它始终是绑定到表达式的最后一个,这意味着:
相当于:
另一个有趣的事实是逗号运算符引入了一个序列点。这意味着表达式:
保证按顺序评估其三个子表达式(a + b,c()和d)。如果它们有副作用,这是很重要的。通常,编译器可以按照他们认为合适的顺序评估子表达式;例如,在函数调用中:
可以按任意顺序评估参数。请注意,函数调用中的逗号不是运算符;他们是分隔符。
它等于 逗号运算符的优先级低于赋值。 逗号运算符:
为所有类型(内置和自定义)定义了默认版本的逗号运算符,它的工作方式如下 - 给定
对于大多数运算符,允许编译器选择执行顺序,如果它不影响最终结果,甚至需要跳过执行(例如 实际上,默认的逗号运算符的工作方式与分号几乎相同。不同之处在于,由分号分隔的两个表达式形成两个单独的语句,而逗号分隔将所有表达式保留为单个表达式。这就是为什么逗号运算符有时用于以下场景:
如果语句不是表达式,则分号不能用逗号替换。例如,这些是不允许的:
在您的情况下,我们有:
请注意,并非每个逗号实际上都是逗号运算符。一些逗号含义完全不同:
*如果您应用优化,则不完全正确。如果编译器认识到某段代码对其余代码完全没有影响,它将删除不必要的语句。 进一步阅读:http://en.wikipedia.org/wiki/Comma_o??perator
a等于
b的值将被分配给a。 是逗号运算符的优先级低于赋值运算符
输出:i = 3
输出:i = 1 我们知道逗号运算符的优先级低于赋值..... a的值将等于b,因为逗号运算符的优先级低于赋值运算符。 首先要做的事情是:逗号实际上不是运算符,对于编译器而言,它只是一个在其他标记的上下文中获得含义的标记。 这是什么意思,为什么要这么麻烦? 例1: 要理解不同上下文中同一令牌的含义之间的区别,我们来看看这个例子:
通常,C ++初学者会认为这个表达式可以/会比较事情,但它绝对是错误的, 对上述示例的正确解释当然是它是模板的实例。 例2: 当我们编写一个带有多个初始化变量的典型for循环和/或应该在循环的每次迭代之后完成的多个表达式时,我们也使用逗号:
逗号的含义取决于使用的上下文,这里是 上下文中的逗号实际上意味着什么? 为了使它更复杂(如在C ++中一样),逗号运算符本身可以被重载(感谢Konrad Rudolph指出这一点)。 回到这个问题,即守则
对编译器来说意味着什么
因为 这是在上下文中解释的
(请注意,解释取决于上下文,这里它既不是函数/方法调用,也不是模板实例。) |
最新内容
相关内容
清理linux命令记录?
清理linux命令记录?,系统,数据,命令,环境,信息,名称,不了,时间,地址,文件夹,在Linux命令终端中查看和编辑曾执行过的命令1、首先打开Linux直接linux查看命令记录?
linux查看命令记录?,信息,系统,时间,地址,名称,命令,数据,环境,服务,历史,linux查看历史命令记录及时间(linux查看历史命令执行时间)linux查看linux系统工作命令?
linux系统工作命令?,系统,工作,地址,设备,信息,标准,命令,单位,发行,数据,Linux文件系统操作命令cat:可以显示文件的内容(经常和more搭配使用),linux记录终端命令?
linux记录终端命令?,系统,信息,工作,地址,命令,名称,服务,首页,第一,管理,linux系统常用操作命令linux常用命令有pwd命令、cd命令、ls命令、calinux导出记录命令?
linux导出记录命令?,系统,标准,数据,命令,地方,地址,位置,服务,下来,设计,在linux中输入命令后,可能会输出一些结果。如何将输入的命令及输出linux命令记录导出?
linux命令记录导出?,系统,标准,数据,命令,信息,文件,代码,图片,设计,工具,在linux中输入命令后,可能会输出一些结果。如何将输入的命令及输出linux执行命令记录?
linux执行命令记录?,系统,信息,时间,电脑,工作,命令,环境,管理,数据,官网,使用什么命令查看Linux服务器命令操作记录?可以查看多少行?1、使用w工作常用的linux命令?
工作常用的linux命令?,工作,地址,系统,信息,命令,工具,管理,网络,单位,标准,linux必学的60个命令安装和登录命令:login、shutdown、halt、reboo查看linux的命令记录?
查看linux的命令记录?,命令,数字,系统,信息,地址,时间,基础,历史,终端,感叹号,linux下history命令显示历史指令记录的使用方法除了使用history记录linux命令参数?
记录linux命令参数?,系统,基础,信息,命令,数字,电脑,网络,管理,参数,历史,linux下history命令显示历史指令记录的使用方法1、除了使用historylinux保存命令记录?
linux保存命令记录?,标准,系统,命令,信息,图片,连续,数据,文件,表示,结果,高分求助,linux一个命令窗口执行了很多命令,请问如何把窗口中所有命linux命令调用记录?
linux命令调用记录?,信息,系统,名称,地址,时间,数据,命令,服务,环境,用户,linux查看历史命令记录及时间(linux查看历史命令执行时间)打开linux