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

允我心安 提交于 2019-11-28 11:08:22

问题


Say for example I have a long statement like

cout << findCurrent() << "," << findLowest() << "," << findHighest() << "," << findThird()<<"\n";

would findCurrent() be run before findLowest() like logic dictates?


回答1:


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).




回答2:


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.



来源:https://stackoverflow.com/questions/50361284/what-is-run-first-inside-a-cout-statement-c17

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!