我在C ++中注意到允许使用++++i
之类的内容,并将i
增加2.但是,i++++
不允许使用{{1}}。为什么不允许后者,而前者是?
答案 0 :(得分:5)
后缀++
的结果是prvalue。 Postfix ++
只能应用于可修改的左值。因此,您无法将postfix ++
应用于另一个postfix ++
的结果。这是有道理的,因为它需要一些对象来修改。运算符的结果只是一个值(操作数原始值的副本) - 没有对象可供您修改。
另一方面,前缀++
的结果是左值,它还期望左值作为其操作数。因此,您可以将前缀++
的结果传递给另一个++
。
考虑到左值作为内存中的对象和rvalues只是值(可能来自内存中的对象),这可能会有所帮助。 Postfix ++
需要一个左值,因为它需要一个可以修改的对象。它返回一个rvalue,因为结果只是一个与任何对象无关的值(因为它是在修改之前从操作数复制的)。前缀++
也想修改其操作数,因此也需要一个左值。但是,它会在修改后返回对象,这是操作数对象本身,所以它的结果也是左值。