为什么我收到错误:
int i=0;
++i++;
这个错误是什么意思?
unexpected type ++i++;
required: variable
found: value
答案 0 :(得分:4)
关于左值(左值)。左值是,“=”逗留的左侧可以。此外,你可以给出一个价值。例如,您不能将值赋予“4”,但您可以为“i”赋值。变量的表达式不仅仅是左值(除了一些非常深奥的编程语言)。
如果你写“++ i ++”,它将被解释为(++ i)++或++(i ++)。 “i”是左值,但“i ++”或“++ i”不是,因为它们是表达式。
在C ++中,有一些棘手的运算符重载和引用变量技巧,可能会欺骗C ++编译器来正确处理它。
答案 1 :(得分:4)
由于++
后缀和前缀具有相同的优先级,我们需要求助 associativity 来弄清楚发生了什么。
++
的关联性是从右到左。
这意味着,从概念上讲,i++
首先发生。但是,这当然是一个固定的值(它是增量前i
的值)。因此,前缀++
将失败,因为它无法在固定值上运行。
答案 2 :(得分:4)
++i
或i++
可用于变量,但不能用于值
i++
++i
没问题,但是
2++
++2
不是。 ++i
或i++
的结果也不是变量i
,但值(例如i=1
i++
会将i
更改为2
但会返回值1
)所以甚至做类似
(++i)++
是不正确的,因为在++i
之后你只会尝试使用++
++i
的结果,例如2
,这样你就可以尝试2++
1}}。类似的情况转到++(i++)
答案 3 :(得分:3)
前缀和后缀版本都要求对变量执行操作,而不是值。您可以使用i
或i++
增加变量++i
,但不能增加5
或3.14
。
++i++
表示您尝试将i
增加1,然后将结果值增加1。有错误。
答案 4 :(得分:1)
++i++;
无效。你一次只能做一个。前缀为++
,后缀为++
我看到你试图将值增加2。您可以按如下方式执行此操作:
i++ // will post-increment the value of i
++i // will pre-increment the value of i
i++
与i = i + 1
或i += 1
相同。因此,正如Sotirios Delimanolis在评论中指出的那样,你需要一些可以保存这个值的变量。