复合赋值运算符可以短路吗

标签 c

我有一些代码循环遍历一组值并使用每个值调用一个函数。

喜欢耶...

for (int i=0; i<limit; i++) {booleanReturn |= doFunc(i);}

只是好奇,没有一个编译器会短路 |= right(不执行 doFunc(i) 因为 booleanReturn 已经是 TRUE?)

我猜测,因为这是一个按位运算符,所以短路操作不是定义的行为,但我希望得到一些验证。

最佳答案

Operator |=operator | 而非 operator || 的复合。前者不会短路。并且不存在运算符 ||=。所以你的问题的答案是否定的。如果有副作用,func 必须 被调用。如果它没有副作用,那么根据as-if 规则,只要您看不出区别,实现就可以自由地做任何事情。

关于复合赋值运算符可以短路吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18354712/

相关文章:

c - 模块化硬币找零程序逻辑【澳大利亚货币】

C: Linux 到 Windows:通过 TCP 发送文本文件在 Windows 端产生不精确的副本

c - 如何在 C 中执行 bash 命令并检索输出?

c - strtok - 如何避免换行并放入字符串数组?

c - 为什么使用 FileTimeToSystemTime() 时程序崩溃?

c - 尝试使用 for 循环初始化 1G 内存时访问内存崩溃

c - 在每次迭代中工作 g_hash_table_foreach

使用 C 创建用户名和余额列表

c - 如何创建一个特定大小的指针,然后让它指向内存中的特定地址

c - 两个线程——从 STDIN 读取文本并通过管道发送