链接++运算符

时间:2014-01-18 20:35:17

标签: c++

我在C ++中注意到允许使用++++i之类的内容,并将i增加2.但是,i++++不允许使用{{1}}。为什么不允许后者,而前者是?

1 个答案:

答案 0 :(得分:5)

后缀++的结果是prvalue。 Postfix ++只能应用于可修改的左值。因此,您无法将postfix ++应用于另一个postfix ++的结果。这是有道理的,因为它需要一些对象来修改。运算符的结果只是一个值(操作数原始值的副本) - 没有对象可供您修改。

另一方面,前缀++的结果是左值,它还期望左值作为其操作数。因此,您可以将前缀++的结果传递给另一个++

考虑到左值作为内存中的对象和rvalues只是值(可能来自内存中的对象),这可能会有所帮助。 Postfix ++需要一个左值,因为它需要一个可以修改的对象。它返回一个rvalue,因为结果只是一个与任何对象无关的值(因为它是在修改之前从操作数复制的)。前缀++也想修改其操作数,因此也需要一个左值。但是,它会在修改后返回对象,这是操作数对象本身,所以它的结果也是左值。