4

并且f(x)+(g(y))可以确保g(y)先打电话吗?我知道表达式中的顺序在很多情况下是未定义的,但在这种情况下括号有效吗?

4

3 回答 3

24

存在括号以覆盖优先级。它们对评估顺序没有影响。

于 2013-07-05T11:27:01.140 回答
12

看,两条线!

auto r = g(y);
f(x) + r;

这引入了两个函数调用之间最重要的序列点。可能还有其他方法可以做到这一点,但这种方法似乎简单明了。请注意,您的括号不会引入序列点,因此不是解决方案。

于 2013-07-05T11:27:47.210 回答
2

不。除非+重新定义运算符,否则像这样的事情是从左到右评估的。即使您能够影响运算符中的优先级,也不一定意味着f并且g以相同的顺序进行评估。如果您需要f在之前进行评估g,您可以随时执行以下操作:

auto resultOfF = f(x);
auto resultOfG = g(x);
resultOfF + resultOfG;
于 2013-07-05T11:28:40.637 回答