我用C
语言尝试了一些代码,但我遇到了这个问题。
int i=0;
i=i+++ ++i; //works fine
//i=i++ +++i; gives error
我的困惑是i+++
如何运行?但+++i
返回错误。
答案 0 :(得分:5)
根据“最长匹配”规则解析C运算符。您的第一个示例被解析为:
i = i ++ + ++ i ;
i = (i++) + (++i);
而你的第二个例子被解析为:
i = i ++ ++ + i ;
i = ((i++)++) + i;
后增量运算符的结果是 rvalue ,它是增量变量的先前值的副本。将另一个后增量运算符应用于右值是一个错误,因为该运算符需要左值,直观地说,可以分配给i
或*p
这样的表达式。< / p>
此外,此代码包含未定义的行为。您正在阅读i
并在没有干预序列点的情况下对其进行修改 - ;
,&&
,||
,,
或{ {1}} - 这意味着程序行为是不可预测的,并且会因编译器而异。
答案 1 :(得分:1)
这两个语句都会产生未定义的行为。但是,第一个正常工作的原因是因为您的编译器将其解释为(i++)+ ++i;
,而第二行是i++ ++(+i)
,这没有任何意义。