【问题标题】:Interaction between post-decrement and logical operators后递减运算符和逻辑运算符之间的交互
【发布时间】:2016-06-28 23:07:53
【问题描述】:

例如,在下面的表达式中

i-- && expr

在评估expr 时,i 是否已经递减?语言律师会适应这里。

【问题讨论】:

    标签: c++ language-lawyer undefined-behavior side-effects


    【解决方案1】:

    如果&& 运算符是内置运算符,则可以。来自[expr.log.and]/2:

    如果对第二个表达式求值,则与第一个表达式关联的每个值计算和副作用都会在与第二个表达式关联的每个值计算和副作用之前进行排序。

    如果运算符重载,则为普通函数调用,函数调用参数的求值顺序未指定。

    【讨论】:

    • 是的,我指的是内置运算符。不错的答案,投票!
    • 注意:有a proposal,目前在 C++17 上,这会使重载的运算符版本也短路
    • @M.M 我不认为这是短路。这将使该提议变得极其危险,因为它改变了 C++ 代码的含义;在我的解释中,它只需要未指定的顺序情况,有时会指定顺序。这不会改变有效的提案前 C++ 的含义。我错过了什么吗?
    • @m.m 是顺序,就像a+b+c 是从左到右一样,它要求operator+ 的顺序相同。 不可能这会导致短路,因为operator&& 不必使用布尔值来短路电路!它确实需要 2 个参数——第二个的值是多少?
    猜你喜欢
    • 1970-01-01
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多