gcc - 短路评估是 C/C++ 或编译器实现中的语言特性吗
问题描述
我想知道是否短路评估
long param = 0;
if ( functAWithSideEffects(¶m) || funcBWithSideEffects(¶m) )
可以依靠。例如,如果 funcAWithSideEffects 返回 true,编译器会评估 funcBWithSideEffects 吗?短路评估是语言特性还是编译器实现细节?
解决方案
是的。它可以依靠。
C标准保证它(强调我的):
4 不同于按位 | 运算符,|| 运算符保证从左到右的评估;如果计算第二个操作数,则在第一个和第二个操作数的计算之间存在一个序列点。如果第一个操作数比较不等于 0,则不计算第二个操作数。
虽然 C++ 在几个方面与 C 不同,但我 99.99% 确信短路评估不是其中之一。
可以找到类似的保证&&
。
推荐阅读
- angular - 合并两种不同角度配置的fileReplacement属性
- spring - Hibernate 在多对多关系中创建两个表
- c# - 使用 SelectList 和 DropDownList 传递 TimeRange 对象
- node.js - 放大配置 - 错误:uncaughtException: spawn cmd ENOENT
- css - 在 CSS 动画中混合颜色
- node.js - 使用 Node.js 通过 json 中的变量插入值
- uml - 更好的 UML 类图结构来表示个人的婚姻
- sql - Oracle:事务表中的新用户计数
- autohotkey - 如何使用 AHK 发送正斜杠
- c++ - 使用复制构造函数 C++ 时出现分段错误