繁体   English   中英

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

[英]Are postfix and prefix increment and decrement expressions lvalues in C11?

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

我知道大多数时候会出现序列点问题,但是在某些极端情况下,了解这一点似乎很有用。 例如,在6.5.2.4中:

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

因此,对于原子类型,类似++ x = x + y的方法将是一种巧妙的方法。 并不是能够做到这样的事情很重要,我只是不喜欢不了解事情。

后缀和前缀递增和递减运算符的行为方式是通过标准文档中专门用于加法运算符和赋值运算符的部分指定的。

对于后缀运算符

[...]有关约束,类型和转换的信息,请参见加法运算符和复合赋值的讨论[...]

如果使用前缀(一元)运算符

[...]表达式++ E等效于(E + = 1)[...]

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

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

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

附带说明,这是C语言与C ++语言之间深层的根本区别之一:C ++是保留左值的语言,而C是丢弃左值的语言。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM