Say for example I have a long statement like
cout << findCurrent() << "," << findLowest() << "," << findHighest() << "," << findThird()<<"\n";
would findCurrent()
be run before findLowest()
like logic dictates?
Say for example I have a long statement like
cout << findCurrent() << "," << findLowest() << "," << findHighest() << "," << findThird()<<"\n";
would findCurrent()
be run before findLowest()
like logic dictates?
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 expressionE2
.
[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 expressionY
if every value computation and every side effect associated with the expressionX
is sequenced before every value computation and every side effect associated with the expressionY
.
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).
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.
© 2022 - 2024 — McMap. All rights reserved.