问题标签 [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.

0 投票
7 回答
914 浏览

c - C#define 宏

这就是我所拥有的,我想知道它是如何工作的以及它实际上做了什么。

它产生两个整数:26 和 30。

它是如何做到的?

0 投票
10 回答
3778 浏览

algorithm - 如何给表达式加上括号?

我有一个想法,可以制作一个简单的程序,这将帮助我在 C 等语言中使用运算符优先级。其中最困难的部分是给表达式加上括号。例如,我想要这个:

转换为:

我在这些步骤中手动完成的:

实现这一目标的最佳方法是什么?是否已经有我可以使用的解决方案?我更喜欢在 PHP、C、C++、Python 或 Ruby 中执行此操作。

(这不是我程序的全部想法,这只是第一步。)

0 投票
5 回答
559 浏览

c# - 方法的优先顺序?

说我有两种方法。一种是由列表框中所选索引更改触发的方法。第二种方法有助于清除所有文本框、将列表框索引设置为 -1 并设置焦点。

问题:

方法二执行时,在代码中将列表框的选定索引更改为-1,从而触发第一种方法的事件触发器。方法 2 是否暂停它自己的执行并将进程转移到事件,然后在方法 1 完成后返回到它的工作......或者方法 2 是否完成其整个代码块然后转移到方法 1,因为所选索引发生了变化?

0 投票
6 回答
22386 浏览

c++ - C++ 中的编译器和参数求值顺序

好的,我知道标准规定 C++ 实现可以选择评估函数的参数的顺序,但是在实际影响程序的情况下,是否有任何实现实际上“利用”这一点?

经典示例:

注意:我不是在找人告诉我不能依赖评估顺序,我很清楚这一点。我只对是否有任何编译器真的按照从左到右的顺序进行评估感兴趣,因为我的猜测是,如果他们做了很多写得不好的代码会中断(这是正确的,但他们仍然可能会抱怨)。

0 投票
7 回答
36550 浏览

c++ - 是否强制使用短路逻辑运算符?和评价顺序?

ANSI 标准是否要求在 C 或 C++ 中将逻辑运算符短路?

我很困惑,因为我记得 K&R 书中说你的代码不应该依赖于这些被短路的操作,因为它们可能不会。有人可以指出标准中说逻辑操作总是短路的地方吗?我对 C++ 最感兴趣,C 的答案也很好。

我还记得读过(不记得在哪里)没有严格定义评估顺序,因此您的代码不应依赖或假设表达式中的函数将按特定顺序执行:在语句结束时所有引用的函数将被调用,但编译器可以自由选择最有效的顺序。

标准是否指明了这个表达式的评估顺序?

0 投票
2 回答
582 浏览

ruby - 这种串联的操作顺序是什么?

这有效,并允许我将两个字符串连接成一个符号,产生输出:

但是,如果我稍微更改它以使用 + 而不是分隔 hello 和 world 字符串的空格,我会收到一个错误:

这会产生以下错误 - 我认为这是因为它试图将“world”.to_sym 回调“投射”回一个字符串,然后再将其连接到“hello”字符串上:

我想知道是什么让第一个示例有效?有谁知道这里的操作顺序是什么?我怀疑这两个字符串实际上被视为一个字符串,它们之间的空格被忽略了,并且在调用 to_sym 方法之前将它们连接起来。实际上,我本来希望它的工作方式与第二个示例没有什么不同,因为我认为在尝试加入“hello”和“world”的内容之前,会在“world”字符串上调用 to_sym。

0 投票
3 回答
385 浏览

javascript - javasctipt 中的 && 和 == 运算符优先级是否重要?

更具体地说,是否存在一组值(a、b 和 c)在语句中运算符优先级很重要:

(NaN 除外)。

0 投票
1 回答
2449 浏览

prolog - Prolog 运算符优先级和规则匹配

我在我的序言解释器中加载了接下来的两个事实:

现在我尝试使用该结果进行下一个查询:

现在我尝试下一个查询:

据我了解,这可以通过运算符优先级如何构建树表达式来解释:

这个解释正确吗?

0 投票
2 回答
9913 浏览

ruby - 使用 ruby​​ splat 运算符在哪里合法?

Splats 很酷。它们不仅仅用于爆炸数组,尽管这很有趣。它们还可以转换为 Array 和展平数组(请参阅http://github.com/mischa/splat/tree/master了解它们所做的详尽列表。)

看起来无法对 splat 执行额外的操作,但在 1.8.6/1.9 中,以下代码会抛出“unexpected tSTAR”:

foo = bar || *zap #=> unexpected tSTAR

而这有效:

foo = *zap || bar #=> works, but of limited value

splat 可以出现在表达式中的什么位置?

0 投票
8 回答
1129 浏览

c - 理解 C 中包含“++”和“->”运算符的表达式的评估

考虑这个例子:

它打印1
所以我理解这是因为根据运算符优先级,->高于++,所以ps->num首先获取值(即 0)然后++运算符对其进行操作,因此将其递增为 1。

在这个例子中,我得到0了,但我不明白为什么;第一个例子的解释应该和这个例子一样。但似乎这个表达式的计算方式如下:
首先,运算符++进行操作,然后对 进行操作ps,因此将其递增到下一个struct。只有 then->操作并且它什么都不做,因为它只是获取num下一个字段struct并且什么都不做。
但这与运算符的优先级相矛盾,运算符的->优先级高于++.

有人可以解释这种行为吗?

编辑
在阅读了两个引用 C++ 优先级表的答案后,表明前缀++/--运算符的优先级低于->,我进行了一些谷歌搜索并提出了这个链接,指出该规则也适用于 C 本身。它完全符合并完全解释了这种行为,但我必须补充一点,此链接中的表格与我自己的 K&R ANSI C 副本中的表格相矛盾。因此,如果您对哪个来源是正确的有建议,我想知道。

谢谢。