gpt4 book ai didi

javascript - 语言如何处理复合运算符的副作用?

转载 作者:可可西里 更新时间:2023-11-01 17:35:54 25 4
gpt4 key购买 nike

假设这样的情况:

int a = (--t)*(t-2);
int b = (t/=a)+t;

在 C 和 C++ 中,这是未定义的行为,如下所述:Undefined behavior and sequence points

然而,这种情况怎么看:

  • JavaScript,
  • Java,
  • PHP...
  • C#
  • 好吧,还有其他任何具有复合运算符的语言吗?

我现在正在修复一个 Javascript -> C++ 端口的错误,其中很多地方都没有引起注意。我想知道其他语言通常如何处理这个问题...保留未定义的顺序在某种程度上特定于 C 和 C++,不是吗?

最佳答案

根据ECMA Script specification ,我相信 javascript 应该符合,在乘法和加法语句中,它在评估右侧之前先评估左侧。 (见 11.5 和 11.6)。我认为这意味着代码应该等同于

t = t - 1;
int a = t * (t - 2);
t = t / a;
int b = t + t;

但是,您不应该总是相信规范与实现相同!

在这种令人困惑的情况下,最好的办法是在原始操作环境中对模糊代码行进行各种输入试验,并尝试确定它在做什么。确保测试可以证实假设的案例,也测试可以证伪假设的案例。

编辑:显然大多数 JavaScript 实现了 ECMAScript 第 3 版,因此我更改了指向该规范的链接。

关于javascript - 语言如何处理复合运算符的副作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4992989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com