首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

表达式(f(x))+g(y)会确定求值顺序么

2013-07-16 
表达式(f(x))+g(y)能确定求值顺序么?本帖最后由 shendaowu 于 2013-07-05 08:00:48 编辑如果不能的话,遇到

表达式(f(x))+g(y)能确定求值顺序么?
本帖最后由 shendaowu 于 2013-07-05 08:00:48 编辑 如果不能的话,遇到这种表达式要怎么办?只能通过对象之间的隔离来避开由求值顺序的不确定导致的问题么?比如如果标题中的那个函数还是不能确定求值顺序的话,那么这两个函数只要不操作相同的变量是不是就不用考虑求值顺序了?
[解决办法]
括号并不是用来决定求值顺序的,是用来决定子表达式的划分的。

除了少数几个运算符外,多数运算符的求值顺序由编译器掌握。

但是,程序员可以通过变通,利用某些求值顺序确定的运算符才达到对求值顺序的控制,以楼主的问题为例,可以利用逗号表达式的固定求值顺序,如下这样做:


int fxResult;
int plusResult;
fxResult = f(x), plusResult = fxResult + g(x);

[解决办法]
只要不影响最终结果就不要管求值顺序,影响了就老实一步一步写
[解决办法]
C/C++标准规定加法运算没有求值顺序,取决于编译器,比如A+B,A和B无法确定谁先求值(A和B可以是任意值或表达式)。

对于你的情况,你要确定顺序,可以用
retf = f(x);
rety = g(y);

r = retx + rety;
这在逻辑上保证了顺序(遍以上和执行上可能乱序),但是你“看到”的代码顺序是有保障的

[解决办法]
无法确定运算顺序的,最好是用临时变量.

热点排行