标签: operator-precedence

Scala中的运算符优先级

我喜欢Scala提出的运算符优先级,但在极少数情况下,未经修改的规则可能不方便,因为在命名方法时有限制.有没有办法为Scala中的类/文件等定义另一个规则?如果没有,将来会解决吗?

scala operator-precedence

47
推荐指数
2
解决办法
2万
查看次数

为什么词典"没有订购"?

我已经在这里回答了许多问题.但究竟是什么意思呢?

var test = new Dictionary<int, string>();
test.Add(0, "zero");
test.Add(1, "one");
test.Add(2, "two");
test.Add(3, "three");

Assert(test.ElementAt(2).Value == "two");
Run Code Online (Sandbox Code Playgroud)

上面的代码似乎按预期工作.那么字典被认为是无序的?在什么情况下上面的代码会失败?

.net c# dictionary operator-precedence base-class-library

45
推荐指数
4
解决办法
9948
查看次数

a =(a ++)*(a ++)在Java中给出奇怪的结果

我正在攻读OCPJP考试,因此我必须了解Java的每一个奇怪的细节.这包括增量前和增量后运算符应用于变量的顺序.以下代码给出了奇怪的结果:

int a = 3;

a = (a++) * (a++);

System.out.println(a); // 12
Run Code Online (Sandbox Code Playgroud)

答案不应该是11吗?或者13?但不是12!

跟进:

以下代码的结果是什么?

int a = 3;

a += (a++) * (a++);

System.out.println(a);
Run Code Online (Sandbox Code Playgroud)

java operator-precedence post-increment ocpjp

45
推荐指数
8
解决办法
7145
查看次数

运算符优先级与评估顺序

术语"运算符优先级"和"评估顺序"是编程中非常常用的术语,对于程序员来说非常重要.而且,据我所知,这两个概念紧密相连; 在谈论表达时,一个人离不开另一个人.

我们举一个简单的例子:

int a=1;  // Line 1
a = a++ + ++a;  // Line 2
printf("%d",a);  // Line 3
Run Code Online (Sandbox Code Playgroud)

现在,很明显会Line 2导致未定义的行为,因为C和C++中的序列点包括:

  1. 在评估&&(逻辑AND)的左右操作数之间,|| (逻辑OR)和逗号运算符.例如,在表达式中*p++ != 0 && *q++ != 0,子表达式的所有副作用 *p++ != 0都在任何访问尝试之前完成q.

  2. 在评估三元"问号"运算符的第一个操作数和第二个或第三个操作数之间.例如,在表达式中,在第a = (*p++) ? (*p++) : 0一个之后存在一个序列点*p++,这意味着它已经在第二个实例执行时增加了.

  3. 在完整表达结束时.此类别包括表达式语句(例如赋值 a=b;),return语句,if,switch,while或do-while语句的控制表达式,以及for语句中的所有三个表达式.

  4. 在函数调用中输入函数之前.未指定参数的计算顺序,但此序列点表示在输入函数之前所有副作用都已完成.在表达式中f(i++) + g(j++) + h(k++), f使用原始值的参数调用i,但i在进入正文之前递增f.同样,jk正在进入前更新gh 分别.然而,不指定以何种顺序f() …

c c++ operator-precedence

44
推荐指数
5
解决办法
1万
查看次数

如果括号具有更高的优先级,那么为什么增量运算符首先被求解?

我有一个行代码,

int a = 10;
a = ++a * ( ++a + 5);
Run Code Online (Sandbox Code Playgroud)

我的预期产量是12 * (11 + 5) = 192,但我得到187.我知道内部的增量运算符()首先要解决,然后为什么首先解决外部的增量运算符?

java operator-precedence

42
推荐指数
3
解决办法
5323
查看次数

Perl三元条件运算符问题中的赋值

我程序中的Perl代码片段给出了错误的结果.

$condition ? $a = 2 : $a = 3 ;
print $a;
Run Code Online (Sandbox Code Playgroud)

无论价值$condition是什么,输出总是3,怎么样?

perl conditional-operator operator-precedence

40
推荐指数
3
解决办法
5780
查看次数

Haskell运算符与函数优先级

我正在尝试为自己验证Haskell中的运算符和函数优先级.例如,以下代码

list = map foo $ xs
Run Code Online (Sandbox Code Playgroud)

可以改写为

list = (map foo) $ (xs)
Run Code Online (Sandbox Code Playgroud)

并最终将成为

list = map foo xs
Run Code Online (Sandbox Code Playgroud)

我的问题曾经是,为什么第一个表述不会被重写为

list = (map foo $) xs
Run Code Online (Sandbox Code Playgroud)

因为函数优先级总是高于运算符优先级,但我认为我找到了答案:运算符根本不允许作为函数的参数(当然,除非用括号括起它们).这是正确的吗?如果是这样的话,我觉得很奇怪,在RWH中没有提到这个机制/规则或者学习一个Haskell,或者我搜索过的任何其他地方.因此,如果您知道规则所在的地方,请链接到该地址.

- 编辑:感谢您的快速解答.我认为我的困惑来自于认为运算符字母会以某种方式评估某些东西,这可能会被函数作为参数使用.它帮助我记住,一个中缀运算符可以机械地转换为前缀函数.对第一个配方这样做会产生

($) (map foo) (xs)
Run Code Online (Sandbox Code Playgroud)

毫无疑问,($)是消耗函数,并且由于两个公式是等价的,因此第一个公式中的$ literal不能被map使用.

haskell function operator-precedence operator-keyword

39
推荐指数
5
解决办法
1万
查看次数

运算符优先级(按位'&'低于'==')

在C编程语言中,为什么按位运算符(&和|)的优先级低于等于运算符(==)?这对我来说没有意义.

c bitwise-operators operator-precedence

39
推荐指数
3
解决办法
5067
查看次数

使用<random>在C++中的随机数顺序

我有以下代码,我写的是为了测试更大程序的一部分:

#include <fstream>
#include <random>
#include <iostream>
using namespace std ;

int main()
{
  mt19937_64 Generator(12187) ;
  mt19937_64 Generator2(12187) ;
  uniform_int_distribution<int> D1(1,6) ;

  cout << D1(Generator) << " " ;
  cout << D1(Generator) << " " << D1(Generator) << endl ;
  cout << D1(Generator2) << " " << D1(Generator2) << " " << D1(Generator2) << endl ;

  ofstream g1("g1.dat") ;
  g1 << Generator ;
  g1.close() ;
  ofstream g2("g2.dat") ;
  g2 << Generator2 ;
  g2.close() ;
}                                                            
Run Code Online (Sandbox Code Playgroud)

这两个生成器的种子具有相同的值,因此我预计输出中的第二行与第一行相同.相反,输出是

1 1 3 …
Run Code Online (Sandbox Code Playgroud)

c++ random operator-precedence c++11

39
推荐指数
3
解决办法
2498
查看次数

使用pop(),list [-1]和+ =时,python中的求值顺序是什么?

a = [1, 2, 3]
a[-1] += a.pop()
Run Code Online (Sandbox Code Playgroud)

这导致了[1, 6].

a = [1, 2, 3]
a[0] += a.pop()
Run Code Online (Sandbox Code Playgroud)

这导致了[4, 2].什么评估顺序给出了这两个结果?

python list operator-precedence indices

39
推荐指数
4
解决办法
3120
查看次数