- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
用 C 语言
#include <stdio.h>
int main(){
int x=100;
x=x++ + x++;
printf("x : %d\n",x); // prints 202
return 0;
}
在Java中
class Demo{
public static void main(String args[]){
int x=100;
x=x++ + x++;
System.out.printf("x : %d",x); // prints 201
}
}
为什么这两种语言打印不同的值?会发生什么“x=x++ + x++;”线?
最佳答案
Java 和 C 是不同的语言,因此并非所有在语法上都有效的构造(有很多,因为 Java 的语法建立在 C 的语法之上)在两者中都必须具有相同的含义。
结构
int x=100;
x=x++ + x++;
就是一个例子。在Java中,表达式的计算顺序被指定为从左到右,并且x++
中递增x
的副作用必须在下一部分之前发生计算表达式的值。因此,上面的代码 - 除了临时变量 - 相当于
int x = 100;
int left = x++; // sets left to x's value (100) and increments x, so x is now 101
int right = x++; // sets right to x's current value (101) and increments x, so x is now 102
x = left + right; // 100 + 101 = 201
在 Java 中。
在 C 中,未指定组成表达式的子表达式的计算顺序,此外,在 x++
中递增 x
的副作用可能发生在上一个序列点和下一个序列点之后的任何时间。
因此,在 C 语言中多次修改同一对象而不插入序列点(旧说法)是未定义的行为,在 1999 版 C 语言标准中,表示为(在第 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.70)
70) This paragraph renders undefined statement expressions such as
i = ++i + 1;
a[i++] = i;
while allowing
i = i + 1;
a[i] = i;
当前(2011)版本的标准将“序列点”术语替换为“前后排序”和“未排序”,第 6.5 节第 2 段现为
If a side effect on a scalar object is unsequenced relative to either a different side effect on the same scalar object or a value computation using the value of the same scalar object, the behavior is undefined. If there are multiple allowable orderings of the subexpressions of an expression, the behavior is undefined if such an unsequenced side effect occurs in any of the orderings.84)
(脚注 84 是前一个脚注 70)。
在 x = x++ + x++
中递增标量对象 x
的两个副作用,以及将右侧的计算值存储在标量对象 x 未排序,因此行为未定义。
编译器可能会拒绝编译包含表达式x++ + x++
的程序,或者完全忽略未定义的行为(或介于两者之间的任何行为)。如果程序编译成功,该行的每个运行时行为
x = x++ + x++;
同样有效。该标准对行为没有施加任何限制。
关于java - 为什么 C 和 Java 对以下循环的处理方式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16638647/
这个问题在这里已经有了答案: standalone parentheses in javascript [duplicate] (5 个答案) 关闭 8 年前。 我在学习JavaScript,有时会
我是mysql新手,我必须减少以下更新查询的执行时间 UPDATE temp_countcalculations, ( SELECT count(*) as insuffcounts,CRP_
def escape_html(s): for (i, o) in (("&","&"),(">", ">"),(" "变成 ">"等。 关于python - 以下 for 循环
if (read(read(cin, data1), data2)) 问题是C++ Primer 5th Edition 的练习。 read 函数定义如下: std::istream &read(st
我想创建两个宏。其中一个将扩展到函数原型(prototype)和函数内容,另一个将扩展到仅函数原型(prototype)。我正在考虑创建以下内容: #ifdef SOME_CONDITION #def
我正在使用 jongo API - org.jongo.MongoCollection 是类。 我有对象 ID 列表并转换为与 ObjectId[] 相同并尝试按如下方式查询 collection.f
有人可以解释以下正则表达式匹配什么吗? ^.*$ 谢谢! 最佳答案 或者整个字符串或者整行,取决于是否multiline mode被使用。 关于java - 以下 ^.*$ 正则表达式匹配什么?,我们
#include void main() { int a,b,c; for(b = c = 10; a = "- FIGURE?, UMKC,XYZHello Folks,TFy!QJ
我的代码段中的以下代码行被 Sonar 检测为问题。 代码段: final int Pending=1; Sonar 问题: Name 'Pending' must matc
Print name of all activities with neither maximum nor minimum number of participants 我尝试了以下查询,但出现错误:
这个问题在这里已经有了答案: What is this practice called in JavaScript? (7 个回答) 关闭8年前。 (function() { //do stuff
根据任务,我们必须通过 foldr 实现 foldl。通过比较函数签名和 foldl 实现,我得到了以下解决方案: myFoldl :: (a -> b -> a) -> a -> [b] -> a
这个问题在这里已经有了答案: Export an es6 default class inline with definition or at end of file? (1 个回答) 关闭 2 年
据我了解,以下是相同的: Person p{}; // Case 1 Person p = {}; // Case 1.5 我注意到 Person p = Person{}; // Case 2 产生
below i have given a javascript code picture `` can any one help me in this code. what do this code.
我想在标题和正文上搜索全文,并在答案计数上进行过滤。 我阅读了elasticsearch documentation for combining filters并构建了此查询。 "query": {
它是流动的 C 代码中的内存泄漏吗? #include int *a; int main() { a = malloc(sizeof(int)*10); return
这两个声明有什么区别: char (*ptr)[N]; 对比 char ptr[][N]; 谢谢。 最佳答案 (1)声明 char (*ptr)[N]; ptr 是指向大小为 N 的字符数组的指针 下
data II = I Int Int deriving (Show) instance II Show where show I a b = show (a+b) showt.hs:3:2: s
我从 clojuredoc 中阅读了关于 condp 的文档。在文档中我找到了以下代码: (condp 一些 [1 2 3 4] #{0 6 7} :>> 公司 #{4 5 9} :>> 十二月 #{
我是一名优秀的程序员,十分优秀!