这种写法,编译器应该怎么去理解

2021-08-03 15:07:40 +08:00
 wayh

C:

int a[2] = {0, 0};
int count = 0;

a[count] = ++count;

// {0,1}

java:

int[] a = {0, 0};
int count = 0;

a[count] = ++count;

// {1,0}

js:

let a = [0,0]
let count = 0

a[count] = ++count

// [1,0]

我在用 WebStorm 调试 js 的时候发现这个问题,默认运行就和上面写的 js 行为一致,调试的时候就变成了和 C 的行为一致,这到底算哪个的 BUG 呢

941 次点击
所在节点    编程
1 条回复
icyalala
2021-08-03 15:23:52 +08:00
不要依赖 undefined behavior 的实现,对于 UB,编译器怎么解释都有可能。
如果你开了 warning,就会有类似的提示 "Multiple unsequenced modifications"。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/793393

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX