- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
public class Test
{
public static void main(String[] args) {
int i = 10;
i = i++;
System.out.println("value of i is : " + i);
}
}
输出为:10
当我在 C
中执行类似代码时,输出为 11
。
最佳答案
对于C
来说,这是undefined behavior因为您试图在同一个 sequence point 中多次修改同一个变量在这一行:
i = i++;
draft C99 standard在 6.5
第 2 段 中说:
Between the previous and next sequence point an object shall have its stored value modified at most once by the evaluation of an expression. Furthermore, the prior value shall be read only to determine the value to be stored.
这在 Java 中得到了很好的定义,它没有与 C
相同的序列点概念,并且 Java 语言规范 ( JLS ) 超出了其规定确保定义此类操作的方法。节15.7 JLS 说:
The left-hand operand of a binary operator appears to be fully evaluated before any part of the right-hand operand is evaluated. For example, if the left-hand operand contains an assignment to a variable and the right-hand operand contains a reference to that same variable, then the value produced by the reference will reflect the fact that the assignment occurred first. [...]
和15.7.2
部分说:
The Java programming language also guarantees that every operand of an operator (except the conditional operators &&, ||, and ? :) appears to be fully evaluated before any part of the operation itself is performed.
注意C
没有指定求值的顺序,主要是为了给编译器better options for optimization 。来自标准草案第 6.5
第 3 段:
The grouping of operators and operands is indicated by the syntax.74) Except as specified later (for the function-call (), &&, ||, ?:, and comma operators), the order of evaluation of subexpressions and the order in which side effects take place are both unspecified.
更新
如果您想讨论 Java 和 C 之间在未定义行为方面的一些哲学差异,您可以使用 Undefined behavior is a design decision和 Undefined behaviour in Java .
关于java - 请解释为什么Java和C对此代码给出不同的答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18402304/
阅读 Doug 的“Javascript: the goods parts”中关于函数的第 4 章谈论“方法调用模式”和“函数调用模式”(第 28 页)。 When a function is sto
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
在 Inkscape 中创建的文件的 svg 路径如下 -- d="m 1.2499932,903.60456 0,146.50004 197.7500068,0 0,-146.50004 -197.
有没有办法只为类对象制作 setter/getter?我的意思是,无论如何要在类里面为 this 设置 get/set 吗?例如: class something { constructor(
int main(int argc,char **argv){ for (argc--, argv++; argc > 0; argc -= argCount, argv += argCount) {
正如 Scott Meyers 和 Andrei Alexandrescu 在 this 中概述的那样文章 简单尝试实现双重检查锁定实现在 C++ 中特别是不安全的,并且通常在不使用内存屏障的多处理器
我正在尝试使用ionic 3 发布一个android 应用程序,但是运行时出现错误 apksigner verify myapp.apk 这些错误显示: WARNING: META-INF/andro
Java网站教程中的这个例子page .两个接口(interface)定义了相同的默认方法 startEngine()。类 FlyingCar 实现了这两个接口(interface),并且由于明显的冲
我在我的桌面应用程序中做了一些非常简单的错误记录,该应用程序通过 SerialPort 与设备通信。我做的一件事是设置一个全局异常捕获器,它除了使用以下方法记录堆栈跟踪外什么都不做: AppDomai
根据 SQL 规范,对此 sql 查询的这些响应中哪些更正确? 这是mysql更高版本的响应 C:\wamp\bin\mysql\mysql5.7.11\bin>mysql.exe --version
我正在尝试解决 GEEK COUNT spoj 的问题。我解决这个问题的方法是先找到所有奇数位的数字,然后从给定的数字中减去它。为了查找所有奇数位的数字计数,我使用了简单的排列。它为我提供了所有可能的
我有这个基本的文本检查代码,在 iOS 7 之前一直运行良好: NSMutableCharacterSet*testchars=[NSCharacterSet alphanumericChara
我对下面的代码感到困惑: class MyException extends Exception {} class AnotherException extends MyException {} cl
我在这段代码中遇到编译错误 #include #include #include using namespace std; void main(int argc
我在我的应用程序中使用导航组件,最近它工作正常但是在将项目更新到 AndroidX 之后我收到错误消息 navigation destination DESTINATION_NAME is unkno
{ "status":"success", "contents":[ { "id":"100", "event":"",
我是一名优秀的程序员,十分优秀!