Являются ли постфиксные и префиксы приращениями и декрементами lvalues в C11? Обычно в стандарте есть примечания внизу, указывающие, является ли данное выражение значением lvalue. В этом случае я не могу найти ничего в стандарте.Являются ли постфиксные и префиксные приращения и декременты выражения lvalues в C11?
Я знаю, что в большинстве случаев будут проблемы с точкой последовательности, но есть некоторые случаи кросс, где кажется, что было бы полезно знать это. Например, в 6.5.2.4:
Postfix ++ для объекта с атомным типом является операцией чтения-изменения-записи с семантикой памяти memory_order_seq_cst.
Из этого следует, что с атомным типом что-то вроде ++ x = x + y будет явным способом сделать что-то. Не то чтобы было важно быть в состоянии сделать что-то такое, мне просто не нравится, когда я ничего не знаю.
Даже если они были lvalues, их изменение может привести к неопределенному поведению для многократного изменения объекта между точками последовательности. – EOF
Есть ли определенное правило против этого? Было бы разумно делать такую вещь с атомными типами. – Kyle
C11 draft standard n1570: * 6.5 Выражения 2 Если побочный эффект скалярного объекта не зависит от другого побочного эффекта на том же скалярном объекте или вычисления значения с использованием значения одного и того же скалярного объекта, поведение не определено. [...] * – EOF