- 论坛徽章:
- 0
|
To 1jjk
>> 但愿我没有误人子弟
>> 把汇编代码扔出来分析分析吧!
误己又误人。C FAQ Question 3.2 中有这么一句话送给你:
(对于这种无定义的表达式,)Don't even try to find out how your compiler implements such things, let alone write code which depends on them (contrary to the ill-advised exercises in many C textbooks)
To 木刀客
你的误解表现在两个方面:
1. 认为对于这种无定义的表达式的结果在特定的编译器中结果是固定的,或者说是有规律的。这是得不到保证的。对于无定义行为的结果作出的任何假设(比如在 GCC 中会得到 7、在 VC 中会得到 9 等)都是不正确的。
2. 认为表达式的计算会从优先级高的运算符开始。这其实是一个很普遍的误解。
如果真如你所想的那样,那么 (++i)+(++i)+(++i) 的结果一定是 9,而不会有其它结果(例如 7 等)。
其实优先级(以及结合性)只是确定了表达式的组合顺序,然而 C/C++ 并没有规定表达式中各个操作数的计算顺序,所以编译器可以根据情况灵活选择操作数的计算顺序。 |
|