经过研究,我了解到递增运算符要求操作数有一个可修改的数据对象:https://en.wikipedia.org/wiki/Increment_and_decrement_operators.

由此,我猜测它会给出编译错误,因为(a+b)是一个临时整数,因此不可修改.

这种理解正确吗?这是我第一次try 研究一个问题,所以如果有什么我应该找的,请建议.

推荐答案

这只是一条规则,仅此而已,可能是为了(1)让编写C编译器变得更容易,(2)没有人说服C标准委员会放松它.

非正式地说,如果foo出现在赋值表达式(如foo = bar)的左侧,则只能写++foo.既然你不会写a + b = bar,你也不会写++(a + b).

没有真正的理由解释为什么a + b不能产生一个++可以操作的临时变量,其结果是表达式++(a + b)的值.

C++相关问答推荐

segfault在C中使用getline()函数

错误:在.h程序中重新定义 struct

如何避免重新分配指针数组时,我们从一开始就不知道确切的大小

显式地将值转换为它从函数返回的类型的含义是什么?

如何跨平台处理UTF-16字符串?

LONG_DOUBLE_T是否存在(标准C:C23)

在C23中使用_GENERIC实现带有右值的IS_POINTER(P)?

在C程序中使用Beaglebone Black UART的问题

如何使用空元素块声明指针数组

生成一个半RNG,结果用C表示(无随机/随机)

是否有单独的缓冲区用于读写库调用?

问题:C#Define上的初始值设定项元素不是常量

赋值两侧的后置增量,字符指针

C:面筋蛋白';为什么不刷新窗口?

从Raku nativecall调用时精度不同

将char*数组深度复制到 struct 中?

为什么 Linux 共享库 .so 在内存中可能比在磁盘上大?

变量的指针右对齐,函数的指针左对齐

当 a 是代码块时使用逗号运算符 (a, b)

char* 上的 free() 被 valgrind 识别为无效