【问题标题】:Efficiency - function call in a conditional statement效率 - 条件语句中的函数调用
【发布时间】:2011-10-27 01:08:36
【问题描述】:

如果我有一些看起来像这样的代码:

if(someInteger || somecomplexfunction() > 0) {
    // do something
}

如果someInteger 计算结果为真,是否会调用该函数?

附言使用 GCC 编译 -O2

【问题讨论】:

  • 这不仅仅是效率问题,而是语义问题。短路不是优化,而是程序正常运行所必需的,如if (!s || isspace(*s))
  • @R 当然,我现在觉得很傻。

标签: c performance conditional function-call processing-efficiency


【解决方案1】:

不,不会。 C 中的逻辑运算符短路,因此如果 || 的左侧为真,则右侧不会计算(因此该函数不会执行,并且它可能具有的任何副作用都不会生效)。与&& 类似,如果左侧评估为 false,则右侧不会被评估。

这是在 C 标准中定义的,并且无论编译选项如何,都会发生在任何符合标准的编译器中。

虽然这有时会带来更好的性能,但这并不是编译器选择进行的优化,而是根植于 C 语义中的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    相关资源
    最近更新 更多