1

可能重复:
谁能解释这些未定义的行为(i = i++ + ++i,i = i++ 等……)
Java 和 C++ 运算符之间有什么区别吗?

为什么一元运算符在 c++ 和 java 中给出不同的结果?

看一下这个:

int i = 1;
i = i++ + ++i;
print i  (with cout or println)

java中:打印4

c++中:打印5

为什么 ?

4

6 回答 6

9

在 C++ 中,诸如语句之类的语句的行为i = i++ + ++i;实际上是未定义的,因此行为不同的事实并不令人惊讶。

事实上,如果两个不同的 C++ 编译器对 C++ 语句产生不同的行为,这不足为奇i = i++ + ++i;

相关问题:

于 2012-07-03T12:43:22.907 回答
1

用这段代码更好地解释:

int i = 1;
int j =0;
j = i++ + ++i;
print j  (with cout or println)

在 java 中 i++ 和 ++i 有相同的结果 i 增加 1 所以你这样做: 2 + 3 = 5 i 之后将是 5。j 之后将是 5

在 c++ 中,i++ 和 ++i 的行为不同,i++ 就地递增,而 ++i 之后递增。

所以它读为 2+ 2。j 将是 4,i 将是 5。

于 2012-07-03T12:46:21.327 回答
1

C++ 和 Java 是不同的语言,所以有不同的效果。请参阅运营商优先级。

在 Java++中(后缀和前缀)在同一行,而在 C++ 中它们具有不同的优先级。

于 2012-07-03T12:47:03.573 回答
1

在 Java 中,后置自增++运算符在某种程度上是“原子的”(与线程无关),因为值被评估为表达式并且增量发生时不受其他运算符的干扰。

来自 Wikipedia 的 Java运算符优先级表

i = i++ + ++i
i = ((i++) + (++i))
i = (1 + (++i)) // i = 2
i = (1 + 3) // i = 3
i = 4

对于 C,行为未按标准定义。

来自 Wikipedia 的 C 的运算符优先级。

于 2012-07-03T12:49:31.760 回答
0
i = i++ + ++i;

导致未指定的行为,这意味着您可以使用不同的编译器或不同的编译器设置获得不同的结果。

于 2012-07-03T12:44:58.557 回答
0
int i = 1;
i = i++ + ++i;
System.out.println(i);

int i = 1;
int j = i++ + ++i;
System.out.println(j);

总是给出4,因为在 Java 中从左到右 (LALR)解析表达式。

于 2012-07-03T12:54:09.290 回答