C++的优先级

来源:百度知道 编辑:UC知道 时间:2024/05/10 10:52:53
int x=5,y;y=y+(x--+3)请问这个题目怎么算,写下解答步骤

y = (y + ((x--) + 3)

-- 大于 + 大于 =
括号强制优先 强制结合

但是x何时变成4这个在不同编译器上结果会不一样。可能在计算x-- + 3之前 也可能在进行y = xxx处理之前。也可能在两者之间。

--

“可能在计算x-- + 3之前”|。这个指的是在x--求值后,x-- + 3求值钱 x-- + 3的结果肯定是8这个点不受影响。


等价于
int x = 5, y;
y = y+(x+3);
x=x-1;

这么认为是错误的,按照C的规范x = x-1必然发生在对y赋值前

等价于
int x = 5, y;
y = y+(x+3);
x=x-1;
上述顺序在各编译器上都一样, 跟编译器无关.
结果,
x为4
y的值无法确定, 因为y没有被赋初始值.

y应该有值,y+(x--+3)相当于y+(x+3);
x=x-1;

y=y+8,y应该有值吧,先算x-- 为5,x--为先赋值再减,所以为y=y+8,而--x为先自减,再赋值,所以如果是--x就应该为y=y+7;