【问题标题】:Is short circuit evaluation a language feature in C/C++ or compiler implementation短路评估是 C/C++ 或编译器实现中的语言特性吗
【发布时间】:2020-05-20 20:09:04
【问题描述】:

我想知道是否短路评估

long param = 0;
if ( functAWithSideEffects(&param) || funcBWithSideEffects(&param) )

值得信赖。例如,如果 funcAWithSideEffects 返回 true,编译器会评估 funcBWithSideEffects 吗?短路评估是语言特性还是编译器实现细节?

【问题讨论】:

  • 通过阅读 C++11 标准进行检查,实际上是 n3337
  • 我确定它被埋在某个地方!

标签: gcc visual-c++ g++


【解决方案1】:

是的。值得信赖。

C standard 保证它(强调我的):

4 不同于按位 |运算符,||运营商保证 从左到右的评估;如果计算第二个操作数,则有 第一个和第二个评估之间的序列点 操作数。 如果第一个操作数比较不等于 0,则第二个 不计算操作数。

虽然 C++ 在几个方面与 C 不同,但我 99.99% 确信短路评估不是其中之一。

&& 也有类似的保证。

【讨论】:

    猜你喜欢
    • 2015-09-12
    • 2012-02-10
    • 1970-01-01
    • 2021-11-21
    • 2017-09-10
    • 2011-02-11
    • 2015-12-01
    相关资源
    最近更新 更多