为什么在C ++中右值递增是非法的?

时间:2018-12-31 08:28:16

标签: c++ increment rvalue

右值递增有什么问题?有什么令人信服的答案,为什么此代码在C ++中应该是非法的?

express.json

2 个答案:

答案 0 :(得分:3)

我们可以猜想它的荒谬性,或者以其他方式猜想,直到奶牛回家,但是简短的回答实际上是您无法做到这一点,因为没有人说服标准委员会认为它可能有用。也许可以吗?

在某些情况下,这样的代码利用了重载的运算符(例如Boost Spirit),确实确实有用。

反对引入它的一个论点是编译器的复杂性。

作为您的最后论点,请注意

int n = 0; ++++n;

是有效的C ++,但是不是有效的C,因为在后一种情况下,++n不是左值。从某种意义上说,您的建议是沿着C ++从C演变而来的进化路径。

答案 1 :(得分:2)

对于cpp standard reference,对于增量运算符:

  

内置前缀递增或递减运算符的操作数expr必须是非布尔算术类型的可修改的(非const)左值,或者是指向完整对象类型的指针。对于非布尔操作数,表达式++ x完全等效于x + = 1,表达式--x完全等效于x-= 1,也就是说,前缀增量或减量是一个左值表达式,用于标识修改的操作数。

++f(2)从中转换为f(2) = f(2) + 1,但是没有LHS可以存储RHS的结果。为此需要lvalues