java中的一元运算符与c++;
可能重复:java中的一元运算符与c++;,java,c++,unary-operator,Java,C++,Unary Operator,可能重复: 为什么一元运算符在C++和java?< /p>中给出不同的结果? 看看这个: int i = 1; i = i++ + ++i; print i (with cout or println) 在java中:打印4 在c++:打印5 为什么?在C++中,< < /P> > P>语句的行为,如 I= I++++ +i;实际上是未定义的,因此行为的不同并不令人惊讶 实际上,如果两个不同的C++编译器< /强>对C++语句 i=i+++ ++ i,< 相关问题: 在C++中,
为什么一元运算符在C++和java?< /p>中给出不同的结果? 看看这个:
int i = 1;
i = i++ + ++i;
print i (with cout or println)
在java中:打印4
在c++:打印5
<>为什么?在C++中,< < /P> > P>语句的行为,如<代码> I= I++++ +i;<代码>实际上是未定义的,因此行为的不同并不令人惊讶 <>实际上,如果<强>两个不同的C++编译器< /强>对C++语句<代码> i=i+++ ++ i,< <代码> 相关问题:
在C++中,语句的行为如<代码> i=i+++ ++ i;<代码>实际上是未定义的,因此行为的不同并不令人惊讶 <>实际上,如果<强>两个不同的C++编译器< /强>对C++语句<代码> i=i+++ ++ i,< <代码> 相关问题:
导致未指定的行为,这意味着您可以使用不同的编译器或不同的编译器设置获得不同的结果。下面的代码可以更好地解释这一点:
int i = 1;
int j =0;
j = i++ + ++i;
print j (with cout or println)
在java中,i++和++i有相同的结果,i增加1,你也可以这样做:2+3=5
我五岁以后。之后j将是5岁
C++中的+++和++的行为不同
i++就地递增,而++i随后递增
所以它是2+2。
j将是4岁,我将是5岁。最好用以下代码来解释:
int i = 1;
int j =0;
j = i++ + ++i;
print j (with cout or println)
在java中,i++和++i有相同的结果,i增加1,你也可以这样做:2+3=5
我五岁以后。之后j将是5岁
C++中的+++和++的行为不同
i++就地递增,而++i随后递增
所以它是2+2。
j将是4岁,我将是5岁。C++和Java是不同的语言,因此效果不同。请参阅操作员优先级
++
操作符在某种程度上是“原子的”(不是线程相关的意义),即值被计算到表达式中,并且增量在没有其他操作符干扰的情况下发生
来自维基百科的Java
i = i++ + ++i
i = ((i++) + (++i))
i = (1 + (++i)) // i = 2
i = (1 + 3) // i = 3
i = 4
int i = 1;
i = i++ + ++i;
System.out.println(i);
int i = 1;
int j = i++ + ++i;
System.out.println(j);
对于C,行为没有标准定义
在Java中,后修复增量
++
操作符在某种程度上是“原子的”(不是线程相关的意义),即值被计算到表达式中,并且增量在没有其他操作符干扰的情况下发生
i = i++ + ++i
i = ((i++) + (++i))
i = (1 + (++i)) // i = 2
i = (1 + 3) // i = 3
i = 4
int i = 1;
i = i++ + ++i;
System.out.println(i);
int i = 1;
int j = i++ + ++i;
System.out.println(j);
来自维基百科的Java
i = i++ + ++i
i = ((i++) + (++i))
i = (1 + (++i)) // i = 2
i = (1 + 3) // i = 3
i = 4
int i = 1;
i = i++ + ++i;
System.out.println(i);
int i = 1;
int j = i++ + ++i;
System.out.println(j);
对于C,行为没有标准定义
维基百科上的C
i = i++ + ++i
i = ((i++) + (++i))
i = (1 + (++i)) // i = 2
i = (1 + 3) // i = 3
i = 4
int i = 1;
i = i++ + ++i;
System.out.println(i);
int i = 1;
int j = i++ + ++i;
System.out.println(j);
始终4,因为在Java中是从左到右(LALR)
给出总是<强> 4 <强>,因为在java中从左到右(LALR).< /p> java实际上指定了这个表达式的值,C++将它留给编译器。C++实际上把它留给硬件。Java没有这个问题,它只在JVM上运行。@Boperson:我不认为这与硬件有关。@nhahtdh-但我知道。我见过一些系统的参考资料,其中内存总线将锁定对同一地址的同时读写。这就是为什么它是未定义的,而不仅仅是未指定的。在某些情况下,我确信编译器会将它留给硬件。不管是不是语言创造者选择了它的定义,没有人知道除了Java本身,Java实际上指定了这个表达式的值,其中C++把它留给编译器。C++实际上把它留给了java。Java没有这个问题,它只在JVM上运行。@Boperson:我不认为这与硬件有关。@nhahtdh-但我知道。我见过一些系统的参考资料,其中内存总线将锁定对同一地址的同时读写。这就是为什么它是未定义的,而不仅仅是未指定的。在某些情况下,我确信编译器会将它留给硬件。无论这是否是语言创建者选择将其定义为未定义的原因,除了他们自己,没有人知道。这为我在Java中打印了
4
。这是未定义的行为
。有很多很多帖子。一个快速搜索建议和开始。还要注意的是,我用g++得到了5
。@Keppil谢谢,但实际上,我不确定引用的评论是否正确,所以删除了我的评论。耶!抱歉@Keppil。指纹被换了。抱歉:-p这用Java为我打印4
。这是未定义的行为
。有很多很多帖子。一个快速搜索建议和开始。还要注意的是,我用g++得到了5
。@Keppil谢谢,但实际上,我不确定引用的评论是否正确,所以删除了我的评论。耶!抱歉@Keppil。指纹被换了。抱歉:-我认为它是未定义的,而不是未指定的。未指定意味着编译器必须选择某些内容并一致地执行。Undefined意味着你自己…@BoBTFish,不,标准说“1.3.13未指定行为[defns.unspecified]行为,对于格式良好的程序构造和正确的数据,这取决于实现。实现不需要记录发生的行为。”。另一方面,未定义的行为是“1.3.12未定义的行为[defns.Undefined]行为,例如在使用错误的程序构造或错误的da时可能出现的行为