后缀和前缀是否在C11中递增和递减表达式左值?

Kyl*_*yle 1 c lvalue c11

后缀和前缀是否在C11中递增和递减表达式左值?通常,标准在底部有注释,指定给定表达式是否为左值.在这种情况下,我在标准中找不到任何东西.

我知道大多数时候会出现序列点问题,但是有一些边缘情况似乎对此有用.例如,在6.5.2.4中:

具有原子类型的对象上的Postfix ++是具有memory_order_seq_cst内存顺序语义的读取 - 修改 - 写入操作.

因此,对于原子类型,像++ x = x + y这样的东西将是一种简单的做事方式.并不是说能够做这样的事情很重要,我只是不喜欢不了解事情.

AnT*_*AnT 5

后缀和前缀增量和减量运算符的这种行为方面是通过专用于加法运算符和赋值运算符的标准文档部分来指定的.

在后缀运算符的情况下

[...]有关约束,类型和转换的信息,请参阅加性算子和复合赋值的讨论[...]

如果是前缀(一元)运算符

[...]表达式++ E相当于(E + = 1)[...]

(后者比前者更直接,但关于结果左值的意图是相同的.)

C中的赋值表达式不是左值

赋值表达式在赋值后具有左操作数的值,但不是左值.

作为旁注,它是C和C++语言之间深层次的基本区别之一:C++是一种左值保留语言,而C是一种左值丢弃语言.