并且f(x)+(g(y))
可以确保g(y)
先打电话吗?我知道表达式中的顺序在很多情况下是未定义的,但在这种情况下括号有效吗?
问问题
404 次
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 回答