What is run first inside a cout statement? (C++17)

后端 未结 2 585
时光取名叫无心
时光取名叫无心 2020-12-21 19:58

Say for example I have a long statement like

cout << findCurrent() << \",\" << findLowest() << \",\" << findHighest() << \

相关标签:
2条回答
  • 2020-12-21 20:20

    Before C++17, the order of evaluation is unspecified.

    As of C++17, it's required to be evaluated left-to-right. See M.M's answer for standard quotation.

    0 讨论(0)
  • 2020-12-21 20:32

    Since C++17 the functions are guaranteed to be called left-to-right, i.e. findCurrent() is called first, then findLowest() and so on.

    C++17 Standard references: [expr.shift]/4 (referring to the expression E1 << E2):

    The expression E1 is sequenced before the expression E2.

    [over.match.oper]/2: (describing overloaded operators)

    the operands are sequenced in the order prescribed for the built-in operator.

    [intro.execution]/15:

    An expression X is said to be sequenced before an expression Y if every value computation and every side effect associated with the expression X is sequenced before every value computation and every side effect associated with the expression Y.

    Link to cppreference summary


    Prior to C++17 the order of function calls was unspecified, meaning that they may be called in any order (and this order does not need to be the same on repeated invocations).

    0 讨论(0)
提交回复
热议问题