当我尝试编译此代码时
int main() {
int i = 0;
++(++i);
}
我收到此错误消息。
test.c:3:5: error: lvalue required as increment operand ++(++i); ^
错误信息是什么?这是解析器拾取的东西,还是仅在语义分析期间发现?
答案 0 :(得分:4)
++i
将给出右值 1 ,并且您无法在右值上应用++
。
§6.5.3.1(p1):
前缀增量或减量运算符的操作数应具有原子,限定或非限定的实数或指针类型,应为可修改的左值。
<子> 1。有时被称为“rvalue”的内容在本国际标准中被描述为“表达的价值”。 - §6.3.2.1脚注64)。
答案 1 :(得分:2)
左值是您可以写入/分配给的值。
您可以将mod Foo {
use std::fs::File;
use std::io::Read;
struct Css {}
impl Css {
pub fn save_result_to_file(file_to_save: String) {
println!("Saving output to {}", file_to_save);
let mut f = File::open(file_to_save).expect("Unable to open file");
}
}
}
应用于++
(i
已修改)但您无法将i
应用于上一个++
运算符的结果。反正我不会有任何影响。
除此之外:C ++允许这样做(可能是因为++
运算符在修改后的值上返回非const引用)
答案 2 :(得分:2)
(++ i)返回新整数值的问题,请注意++操作需要一些变量用于赋值,而不是值(你试图增加整数而不是变量),所以你可以使用这个相反:
i += 2;
或
i = i + 2;