为什么我+++工作正常,但+++我给出错误?

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返回错误.

Jon*_*rdy 5

根据"最长匹配"规则解析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和中间没有修改它序列点 - ,;,&&,||,,?:哪位意味着程序的行为是不可预测的,将整个编译器有所不同.

  • 也被称为"最大蒙克"规则. (2认同)