|
1
49
C#编译器当然是 . 它被编译成IL。基本上,你所看到的(我想是从Reflector上看到的)是一个 反编译器 为那个IL吐口水。
同样,此代码段之间的区别:
这段话:
|
|
|
2
8
我认为从语言语义学的角度来看,这两个表达式是完全等价的。这两种方法都涉及短路。
编辑 总而言之: OP的问题是“为什么会发生这种优化”。 事实上,没有“优化”发生。这两个C#源代码在逻辑上是等价的。“.Net Reflector”或任何其他反汇编工具可能同样可能将相同的IL反编译为一个或另一个。在IL层面上,只存在一系列条件跳跃,因此不一定有办法知道“哪条路是if,哪条路是else”或其他类似的DeMorgan等价物。
令人高兴的是,最终群众(以及@Mehrdad这样的聪明人)的智慧占了上风。万岁! (我把我的答案做成了一个维基,因为我不想让rep因为“讲述一个问题”而被授予“一个问题的好答案”。但我认为这个问题的故事很有趣。) |
|
|
3
6
if编译为条件跳转操作码。通过将条件跳转目标与fall-through块交换,将否定从表达式中取出,可以对其进行优化。 |
|
|
giantjenga · 优化整数向量到二进制向量的转换 1 年前 |
|
|
Daniel Lobo · 使用约束进行优化 1 年前 |
|
Sergio · python中大量数字的乘法 2 年前 |
|
|
Sergey Dev · 临时表与表变量 2 年前 |
|
|
John · 减少C中的内存消耗++ 2 年前 |