右值递增有什么问题?有什么令人信服的答案,为什么此代码在C ++中应该是非法的?
express.json
答案 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
。