在cout语句中首先运行什么? (C ++ 17)

时间:2018-05-16 01:40:08

标签: c++ operator-overloading c++17 cout operator-precedence

比方说,我有一个很长的陈述,如

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

findCurrent()会在findLowest()逻辑指令之前运行吗?

2 个答案:

答案 0 :(得分:5)

从C ++ 17开始,保证从左到右调用函数,即首先调用findCurrent(),然后调用findLowest(),依此类推。

C ++ 17标准参考:[expr.shift] / 4(指代表达式E1 << E2):

  

表达式E1在表达式E2之前排序。

[over.match.oper] / 2 :(描述重载的运算符)

  

操作数按照内置运算符规定的顺序排序。

[intro.execution] / 15:

  

表达式X在表达式Y之前被称为排序   在每个值计算和与表达式X相关的每个副作用之前,对值计算和与表达式Y相关联的每个副作用进行排序。

Link to cppreference summary

在C ++ 17之前,函数调用的顺序是未指定,这意味着它们可以按任何顺序调用(并且这个顺序在重复调用时不需要相同)。 / p>

答案 1 :(得分:1)

在C ++ 17之前,the order of evaluation is unspecified

从C ++ 17开始,它需要从左到右进行评估。有关标准报价,请参阅M.M's answer