问题标签 [compound-assignment]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
639 浏览

java - 为什么 Java 中的复合赋值不能捕获溢出问题?

令我震惊的是,以下代码甚至可以在没有警告的情况下编译:

而正如您所期望的那样,这会产生编译时错误:

我查了一下,确实,JLS(第 15.26.2 节)有这样的说法:

E1 op = E2 形式的复合赋值表达式等价于 E1 = (T) ((E1) op (E2)),其中 T 是 E1 的类型,除了 E1 只计算一次。

这对我来说似乎很荒谬。为什么他们觉得有必要在这里明确投射?似乎自动类型转换无论如何都会处理扩大,并且像这样自动缩小几乎可以保证导致整数溢出。

0 投票
2 回答
13624 浏览

c# - 为什么 C# 中没有 ||= 或 &&= 运算符?

对于所有逻辑运算符、移位运算符、加法运算符和所有乘法运算符,我们都有等效的赋值运算符。

为什么逻辑运算符被遗漏了?是否有很好的技术原因说明它很难?

0 投票
3 回答
116 浏览

c# - 为什么 _ret 评估为真,不应该评估为假(位运算符)?

我们在我们正在开发的一个更大的应用程序中遇到了这个问题,并且想知道它是否是预期的功能?这是用 c# 和 Visual Studio 2010 编写的

0 投票
1 回答
246 浏览

lua - Lua 变异分配补丁如何工作?

我关注了这个页面,得到了一个元方法 __mutate_asn。这是我的测试代码。

输出:1 2 1 "a" 永远不会改变。

0 投票
1 回答
1817 浏览

c++ - C++ 复合文字

在 C 中我可以这样做:

但是,在 C++ 中,我得到语法错误。我使用 GNUg++编译器。是否有开关可以启用此功能?

0 投票
3 回答
1546 浏览

python - python/集合/字典/初始化

有人可以解释帮助我理解这段代码是如何工作的吗?特别是 myHeap 分配是如何工作的。我知道 freq 变量被分配为字典。但是我的 myHeap 呢?它是一套吗?

0 投票
2 回答
11436 浏览

c++ - 复合赋值和添加运算符重载

我需要关于下面介绍的两个运算符重载函数的帮助。我不确定如何在不实际使用函数定义中的赋值的情况下实现这一点。

我的 .cpp 文件中运算符 + 的代码:

.cpp 文件中 += 运算符的代码:

从 main.cpp 调用:

我知道我的 .cpp 文件代码是错误的,一些见解会很棒!

0 投票
3 回答
180 浏览

c++ - MySet(20,100) = "abcd"; 复制和/或分配?

抱歉,如果这个答案应该是显而易见的,也许这有一个模式名称,如“笨拙的分配重载”,并且没有按正确的主题搜索 - 重定向最受欢迎的代码摘录:

A 和 B 的分配工作,但 C 然后 g++ 抱怨....:myset.cxx:19:16: error: expected ',' or ';' 在'='标记之前

不是什么大问题,但一直试图理解为什么无效。

感谢您提供任何有用的回复。

更多信息...猜我是要编辑我的操作?

关于为什么上述被认为是非法的令人费解,一直在寻找一个明确的原因......当然还有一个技巧可以让编译器接受这种符号。

考虑到合法的类似用途

来自几十年的 C 编译器,如下所示:

都受到 c++ 编译器的尊重。可以在结构上具有成员函数,它仍然可以工作:

添加构造函数时开始反对:

想知道是否可以使用正确的初始化程序,以便编译器可以匹配构造函数

甚至

添加

允许

但不是

为这个结束了一个很长的帖子道歉,但我正在寻找一些关于为什么构造函数+赋值被拒绝以及如何/是否可以容纳的任何想法的参考。

在 MySet 的符号中,这将是一个熟悉的声明,在我宣布它非法之前,我想检查一下是否错过了一个技巧。

谢谢。

0 投票
1 回答
506 浏览

javascript - 在 JavaScript 中链接复合赋值运算符

在 C# 中,

写道abcabcabc(http://ideone.com/pFNFX2)。这很好,因为 C# 规范在第 7.16.2 节中明确指出

该操作被评估为 x = x op y,除了 x 只被评估一次。

但是,在阅读 ECMAScript 5.1 语言规范第 11.3.2 节中对复合赋值运算符的描述时,我在该运算符的语义中没有看到这样的“仅一次”限定符。相反,我看到的是:

  1. 令 lref 为评估 LeftHandSideExpression 的结果。
  2. 令 lval 为 GetValue(lref)。
  3. 令 rref 为评估 AssignmentExpression 的结果。
  4. 设 rval 为 GetValue(rref)。
  5. 令 r 为将运算符 @ 应用于 lval 和 rval 的结果。
  6. 如果以下条件都为真,则抛出 SyntaxError 异常:(截断)
  7. 调用 PutValue(lref, r)。
  8. 返回 r。

因此,看起来(对我来说,无论如何)以下 JavaScript 代码

会提醒abcabcabcabc(因为括号表达式中第 7 行的 PutValue),但是无论如何在 Chrome 22 中,它都会提醒abcabcabc.

所以我的问题是:我是误读了规范,还是 Chrome(也许是 V8?)做​​自己的事情不符合规范,可以这么说?

0 投票
3 回答
631 浏览

programming-languages - a = b 是否有复合赋值运算符一个(其中不是可交换的)?

在许多语言中,a = a + b 可以写成 a += b 在数值运算的情况下,a + b 与 b + a 相同,因此单个复合运算符就足够了。

此外, a = a - b 可以写成 a -=b 。

但是,ab 不等于 ba。因此,复合赋值运算符不适用于 a = b - a

那么,是否有用于操作a = b op a的复合赋值运算符(其中op可以是 +、-、*、/、%,并且顺序很重要)?

[非交换运算]