为什么我收到以下错误:
int i=0;
++i++;
这个错误是什么意思?
unexpected type ++i++;
required: variable
found: value
为什么我收到以下错误:
int i=0;
++i++;
这个错误是什么意思?
unexpected type ++i++;
required: variable
found: value
它是关于左值(左值)。左值是,“=”左侧的内容可以。此外,对于您可以赋予的价值。例如,不能给“4”赋值,但可以给“i”赋值。变量的表达式不仅仅是左值(一些非常深奥的编程语言除外)。
如果你写“++i++”,它将被解释为(++i)++或++(i++)。“i”是左值,但“i++”或“++i”不是,因为它们是表达式。
在 C++ 中,通过一些棘手的运算符重载和引用变量技巧,可以欺骗 C++ 编译器正确处理此问题。
由于++
后缀和前缀具有相同的优先级,我们需要借助关联性来弄清楚发生了什么。
的关联性++
是从右到左。
这意味着,从概念上讲,i++
首先发生。但这当然是一个固定值(它是i
增量之前的值)。因此,前缀++
将失败,因为它不能对固定值进行操作。
++i
ori++
可以用在变量上,但不能用在值上
i++
++i
可以,但是
2++
++2
不是。or 的结果++i
也不i++
是变量i
而是值(例如 fori=1
i++
会更改i
为2
但会返回 value 1
)所以即使做类似的事情
(++i)++
将是不正确的,因为在++i
您尝试使用++
结果之后++i
,例如2
,您将尝试执行2++
. 类似的情况发生在++(i++)
前缀和后缀版本都要求对变量而不是值执行操作。i
您可以使用i++
or递增变量,++i
但不能递增5
or 3.14
。
++i++
意味着您试图增加i
一,然后将结果值增加一。有错误。
++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 在评论中指出的那样,您需要一些可以保存该值的变量。