我最近在一次采访中被问到这个问题,我完全错了,但让我对C#和.net中的编译器优化感到好奇
请考虑以下代码段:
void Main()
{
Console.WriteLine("Results when bitwise or is used: ");
Console.WriteLine(FuncA() | FuncB());
Console.WriteLine("Results when or operator is used: ");
Console.WriteLine(FuncA() || FuncB());
}
bool FuncA()
{
Console.WriteLine("Function A is executing.");
return true;
}
bool FuncB()
{
Console.WriteLine("Function B is executing.");
return false;
}
Run Code Online (Sandbox Code Playgroud)
运行上面的结果会得到以下结果:
按位或使用时的结果:
功能A正在执行.
功能B正在执行.
真正
使用或运算符时的结果:
功能A正在执行.
真正
我的问题是为什么在使用按位运算符时编译器没有优化?就像C#或运算符一样,编译器已经知道了这些参数,那么为什么它不会以相同的方式处理它呢?