比方说,我有一个很长的陈述,如
cout << findCurrent() << "," << findLowest() << "," << findHighest() << "," << findThird()<<"\n";
findCurrent()
会在findLowest()
逻辑指令之前运行吗?
答案 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
相关联的每个副作用进行排序。
在C ++ 17之前,函数调用的顺序是未指定,这意味着它们可以按任何顺序调用(并且这个顺序在重复调用时不需要相同)。 / p>
答案 1 :(得分:1)
在C ++ 17之前,the order of evaluation is unspecified。
从C ++ 17开始,它需要从左到右进行评估。有关标准报价,请参阅M.M's answer。