Dev*_*ata 1 c operators pre-increment post-increment
我已经尝试了一些C语言代码,但我遇到了这个问题.
int i=0;
i=i+++ ++i; //works fine
//i=i++ +++i; gives error
Run Code Online (Sandbox Code Playgroud)
我的困惑是如何i+++运行?但是+++i返回错误.
根据"最长匹配"规则解析C运算符.您的第一个示例被解析为:
i = i ++ + ++ i ;
i = (i++) + (++i);
Run Code Online (Sandbox Code Playgroud)
而您的第二个示例被解析为:
i = i ++ ++ + i ;
i = ((i++)++) + i;
Run Code Online (Sandbox Code Playgroud)
后增量运算符的结果是rvalue,它是增量变量的先前值的副本.将另一个后增量运算符应用于右值是一个错误,因为该运算符需要一个左值,直观地表示诸如i或*p可以赋值的表达式.
此外,此代码包含未定义的行为.您正在阅读i和中间没有修改它序列点 - ,;,&&,||,,或?:哪位意味着程序的行为是不可预测的,将整个编译器有所不同.