1

为什么我收到以下错误:

int i=0;
++i++;

这个错误是什么意思?

  unexpected type ++i++;                    
  required: variable  
  found:    value
4

5 回答 5

4

它是关于左值(左值)。左值是,“=”左侧的内容可以。此外,对于您可以赋予的价值。例如,不能给“4”赋值,但可以给“i”赋值。变量的表达式不仅仅是左值(一些非常深奥的编程语言除外)。

如果你写“++i++”,它将被解释为(++i)++或++(i++)。“i”是左值,但“i++”或“++i”不是,因为它们是表达式。

在 C++ 中,通过一些棘手的运算符重载和引用变量技巧,可以欺骗 C++ 编译器正确处理此问题。

于 2013-11-13T16:10:58.320 回答
4

由于++后缀和前缀具有相同的优先级,我们需要借助关联性来弄清楚发生了什么。

的关联性++是从右到左。

这意味着,从概念上讲,i++首先发生。但这当然是一个固定(它是i增量之前的值)。因此,前缀++将失败,因为它不能对固定值进行操作。

于 2013-11-13T16:11:08.420 回答
4

++iori++可以用在变量上,但不能用在值上

i++
++i

可以,但是

2++
++2

不是。or 的结果++i也不i++是变量i而是值(例如 fori=1 i++会更改i2但会返回 value 1)所以即使做类似的事情

(++i)++

将是不正确的,因为在++i您尝试使用++结果之后++i,例如2,您将尝试执行2++. 类似的情况发生在++(i++)

于 2013-11-13T16:14:49.890 回答
3

前缀和后缀版本都要求对变量而不是值执行操作。i您可以使用i++or递增变量,++i但不能递增5or 3.14

++i++意味着您试图增加i一,然后将结果增加一。有错误。

于 2013-11-13T16:08:28.597 回答
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 在评论中指出的那样,您需要一些可以保存该值的变量。

于 2013-11-13T16:05:04.897 回答