标题所说的。对于C++,
(++a)++
是可以编译的。但是很奇怪的是,++(a++)
却不行:int main() {
int a = 0;
++a++; // does not compile
(++a)++; // does compile
++(a++); // does not compile
}
但在Java中,并非所有三个都适用:
public class Test {
public static void main(String[] args) {
int a = 0;
++a++; // does not compile
(++a)++; // does not compile
++(a++); // does not compile
}
}
为什么C++可以编译这个程序而Java不行?
a++
是一个“void”语句的意义是什么? - Fred LarsonC++11
编译器,但我认为任何C++编译器都可以使用。我认为它是一个void
语句,因为它在功能上等同于:a = a+1;
这不会给出实际值。 - Ryan Dougherty"...a parser using only one-token lookahead and no semantic analysis during the parse would not be able to tell, when ++ is the lookahead token, whether (p) should be considered a Primary expression or left alone for later consideration as part of a CastExpression."
- azurefroga++
返回的是自增前的a
值。 - Fred Larson