问题标签 [operator-precedence]
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.
c# - int[] arr={0}; int 值 = arr[arr[0]++]; 值 = 1?
今天我看到了Eric Lippert的一篇文章,他试图澄清运算符优先级和评估顺序之间的神话。最后有两个代码片段让我感到困惑,这是第一个片段:
现在当我考虑变量 value 的值时,我只是简单地将其计算为 1。这就是我认为它的工作方式。
- 首先将 arr 声明为一个 int 数组,其中包含一个项目;该项目的值为 0。
- 在这种情况下,第二次获取 arr[0] --0 的值。
- 第三次获取 arr[步骤 2 的值] 的值(仍为 0) -- 再次获取 arr[0] -- 仍为 0。
- 第四步将步骤 3 (0) 的值赋给变量值。--value = 0 现在
- 添加到第 2 步的值 1 -- 现在 arr[0] = 1。
显然这是错误的。我试图在 c# 规范中搜索一些关于何时实际发生增量的明确声明,但没有找到任何内容。
第二个片段来自 Eric关于该主题的博客文章的评论:
现在这就是我认为这个程序将如何执行——在声明数组并将 1 分配给 i 之后。[请忍受我]
- 获取数据[i] --1
- 将值 5 --6 添加到第 1 步的值
- 将第 2 步的值赋给 data[i](仍为 1) --data[i] = 6
- 递增 i -- i = 2
根据我的理解,这个数组现在应该包含值 { 11、27、33 }。但是,当我循环打印得到的数组值时:{11、38、33}。这意味着后增量发生在取消引用数组之前!
怎么会?这个帖子增量不应该是帖子吗?即发生在其他一切之后。
我想念什么?
python - Python字符串格式化和字符串乘法奇数
Python 正在执行字符串乘法,我希望它执行数字乘法,但我不知道为什么。
即使将类型强制为整数也无济于事。(我意识到这是多余的,但对我来说这是一个白痴检查:
显然我解决了我的问题(添加括号就可以了)但是这里发生了什么?如果这只是我必须记住的一个怪癖,那很好,但我宁愿理解这背后的逻辑。
c# - 此 Console.WriteLine 语句中的错误在哪里?
如果您运行以下代码,您将获得输出:
答案是:<br>
<br>
第二行发生了什么,预计是:
答案是:<br>
只是为了澄清任何想知道的冲浪者的答案:
被评估为
c++ - 我们如何解释表达式 (++x)+(++x)+(++x) 的结果?
我希望输出是11
,但实际上是12
。为什么?
c++ - 初始化器列表 *argument* 评估顺序
因此,C++ 标准要求类成员按照它们在类中声明的顺序进行初始化,而不是按照它们在任何构造函数的初始化列表中的顺序进行初始化。但是,这并不意味着评估这些初始化的参数的顺序。我正在使用一个经常传递对序列化对象的引用的系统,并且想知道我是否可以确保以正确的顺序从中读取位,而与这些位写入对象字段的顺序无关。
显然,在声明中重新排序像ints
and这样的东西doubles
并不是什么大不了的事,但有时需要动态分配的更大的对象和东西就可以了。
perl - Perl 如何决定在表达式中计算项的顺序?
给定代码:
我希望$x
是180
:
但相反的是30
;但是,如果我更改条款的顺序:
我明白了180
。我感到困惑的原因是perldoc perlop
说得很清楚:
TERM 在 Perl 中具有最高优先级。它们包括变量、引号和类似引号的运算符、括号中的任何表达式,以及任何参数被括号括起来的函数。
由于($x += 5)
是在括号中,它应该是一个术语,因此无论表达式的顺序如何,都首先执行。
linq-to-sql - linq2sql 如何处理只有 FK 的表?
我有一个映射表,如:
Article_to_Categories
文章ID 类别ID
如何使用 linq2sql 插入此表?
javascript - 在Javascript中是否按顺序执行相等的超时?
假设我这样做
我可以确定 foo 会在 bar 之前开始执行吗?如果我使用 1、10 或 100 作为 bar 的超时值而不是 0,会怎样?
简单的实验表明,在超时值相等的情况下,超时目标的执行顺序与 setTimeouts 本身相同,但是依赖这种行为是否安全?
javascript - Javascript 三元运算符的运算符优先级
我似乎无法与三元运算符结合使用此代码的第一部分( += )。
我认为这段代码的工作方式如下:
但这不正确,因为这会在我的控制台中出现错误。
所以我的问题是我应该如何正确地解释这段代码?
c# - 每个循环的 C# 以什么顺序遍历 List?
我想知道 C# 中的 foreach 循环遍历System.Collections.Generic.List<T>
对象的顺序。
我发现了另一个关于同一主题的问题,但我觉得它回答的问题令我满意。
有人说没有定义顺序。但正如其他人所说,它遍历数组的顺序是固定的(从 0 到 Length-1)。8.8.4 foreach 语句
也有人说,这同样适用于任何带有顺序的标准类(例如List<T>
)。我找不到任何文档来支持它。所以据我所知,它现在可能会这样工作,但也许在下一个 .NET 版本中它会有所不同(即使它可能不太可能)。
我还List(t).Enumerator
没有运气地查看了文档。
另一个相关问题指出,对于 Java,它在文档中特别提到:
List.iterator()
以正确的顺序返回此列表中元素的迭代器。”
我正在 C# 文档中寻找类似的东西。
提前致谢。
编辑:谢谢你们所有的回答(很惊讶我得到这么多回复的速度)。我从所有答案中了解到的是,List<T>
它总是按其索引的顺序进行迭代。但我仍然希望看到明确说明这一点的文档,类似于List
.