标签: operator-precedence

C++中变量的多个预增量运算(C?)

为什么以下用C++编译?

int phew = 53;
++++++++++phew ;
Run Code Online (Sandbox Code Playgroud)

相同的代码在C中失败,为什么?

c c++ operators operator-precedence pre-increment

17
推荐指数
2
解决办法
2784
查看次数

了解嵌套的PHP三元运算符

我不明白输出(" four")是怎么来的?

$a = 2;

echo
  $a == 1 ? 'one'   :
  $a == 2 ? 'two'   :
  $a == 3 ? 'three' :
  $a == 5 ? 'four'  : 
    'other'  
  ;

// prints 'four'
Run Code Online (Sandbox Code Playgroud)

我不明白为什么" four"被打印出来.

php ternary-operator operator-precedence

17
推荐指数
2
解决办法
4073
查看次数

Haskell:解析模式中的错误

谁喜欢告诉我这段代码有什么问题(语法上)?

-- merge two sorted lists
mergeX [] b res = b ++ res
mergeX a [] res = a ++ res
mergeX a:as b:bs res
    | a > b     = mergeX as b:bs a:res
    | otherwise = mergeX a:as bs b:res
Run Code Online (Sandbox Code Playgroud)

解释:

解析模式中的错误:mergeX

haskell pattern-matching operator-precedence parse-error

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

Haskell类型的运算符优先级

TypeOperators启用语言扩展后,可以定义自己的类型运算符.此外,可以设置它们的相对优先级infix*.但是(->),例如,优先权是什么?

> :i (->)
data (->) a b   -- Defined in `GHC.Prim'
instance Monad ((->) r) -- Defined in `GHC.Base'
instance Functor ((->) r) -- Defined in `GHC.Base'
instance Applicative ((->) a) -- Defined in `Control.Applicative'
instance Arrow (->) -- Defined in `Control.Arrow'
instance Monoid b => Monoid (a -> b) -- Defined in `Data.Monoid'
instance ArrowLoop (->) -- Defined in `Control.Arrow'
instance ArrowChoice (->) -- Defined in `Control.Arrow'
instance ArrowApply (->) -- Defined in …
Run Code Online (Sandbox Code Playgroud)

haskell operators operator-precedence ghci

17
推荐指数
1
解决办法
1113
查看次数

C++中赋值语句的评估顺序

map<int, int> mp;
printf("%d ", mp.size());
mp[10]=mp.size();
printf("%d\n", mp[10]);
Run Code Online (Sandbox Code Playgroud)

此代码产生的答案不是很直观:

0 1

我理解为什么会发生这种情况 - 赋值的左侧返回对mp[10]底层值的引用,同时创建上述值,然后使用新计算size()的映射来评估右侧.

这种行为在C++标准中是否有任何说明?或者评估顺序是否未定义?

使用g ++ 5.2.1获得结果.

c++ operator-precedence language-lawyer

17
推荐指数
2
解决办法
2241
查看次数

为什么`在Ruby中返回a或b`是一个void值表达式错误?

这很好:

def foo
  a or b
end
Run Code Online (Sandbox Code Playgroud)

这也没关系:

def foo
  return a || b
end
Run Code Online (Sandbox Code Playgroud)

返回void value expression:

def foo
  return a or b
end
Run Code Online (Sandbox Code Playgroud)

为什么?它甚至没有被执行; 它没有通过语法检查.什么void value expression意思?

ruby return operator-precedence or-operator

17
推荐指数
2
解决办法
1258
查看次数

这个三元条件表达式是如何执行的?

int x = 5,y = 10;
bool boolean = 0;
int k = (boolean ? ++x, ++y : --x, --y);
cout<<k;
Run Code Online (Sandbox Code Playgroud)

当布尔值为0时,它输出9,但是当它为1时输出10.我知道这是因为优先级而发生,但无法准确弄清楚它是如何发生的,请帮助我理解这一点.

注意:我知道如果我使用括号,我可以获得预期的输出,或者更好地编写一个干净的代码,我只是用它来理解编译器如何根据优先级来评估这些表达式.

c++ ternary-operator operator-precedence

17
推荐指数
3
解决办法
1349
查看次数

始终保证`seq`的评估顺序(另外还有'pseq`的奇怪行为)

seq功能文档说明如下:

关于评估顺序的注释:表达式seq a b不保证a将在之前进行评估b.给出的唯一保证seq是,既ab会前进行评估seq返回一个值.特别是,这意味着b可以在之前进行评估a.如果需要保证特定的评估顺序,则必须使用pseq"并行"软件包中的功能.

所以我有一个sum带累加器的懒函数:

sum :: Num a => [a] -> a
sum = go 0
  where
    go acc []     = acc
    go acc (x:xs) = go (x + acc) xs
Run Code Online (Sandbox Code Playgroud)

显然,这在大名单上非常缓慢.现在我用seq以下方法重写这个函数:

sum :: Num a => [a] -> a
sum = go 0
  where
    go acc []     = acc
    go acc (x:xs) = …
Run Code Online (Sandbox Code Playgroud)

haskell lazy-evaluation operator-precedence ghc

17
推荐指数
2
解决办法
531
查看次数

按位运算不与Java中print()中的字符串连接

这段代码

int a = 6;
System.out.print("The result is " + a*a);
Run Code Online (Sandbox Code Playgroud)

工作得很好,但这一个

int a = 6;
System.out.print("The result is " + a^a);
Run Code Online (Sandbox Code Playgroud)

产生例外:

线程"main"中的异常java.lang.RuntimeException:无法编译的源代码 - 错误的树类型:at pkg1.pkg4.taking.input.TakingInput.main(TakingInput.java:11)

为什么这样?

当我试图一次性打印几个按位操作的结果时出现了这个问题,如下所示:

System.out.print(a&b + "\n" + a|b + "\n" + a^b);
Run Code Online (Sandbox Code Playgroud)

我查看了print()方法的描述和关于按位运算符的几个主题以及在SO上打印到控制台,包括编写问题时的推荐主题,但找不到答案.

java printing bitwise-operators operator-precedence

17
推荐指数
1
解决办法
681
查看次数

箭头(-&gt;)运算符的优先级/优先级最低,还是分配/组合分配的优先级最低?

JLS

最低优先级操作者是lambda表达式的箭头( - >) 随后由赋值运算符。

遵循哪个方向(增加优先级,减少优先级)?-“跟随”是指分配的优先级较高还是较低(相对于箭头运算符)?我猜想,这是因为“最低”(箭头)表示绝对最低。

据我了解,箭头(->)应该位于此Princeton运算符优先级表的最底部(在所有赋值运算符的下方),因此箭头(->)的优先级为0(零)(根据该表)。

我的理解正确吗?

ExamTray似乎说箭头优先级至少与分配相同。此外,还阐明了箭头的关联性是Left-> To-> Right(与分配不同)。我没有找到JLS的箭头关联性报价。

我一直认为分配优先级原则上最低。

java specifications operator-precedence language-lawyer java-8

17
推荐指数
2
解决办法
564
查看次数