我最近在一次采访中被问到这个问题,我完全错了,但让我对 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;
}
运行上述结果得到以下结果:
使用按位或时的结果:
函数 A 正在执行。
功能 B 正在执行。
真的
使用 or 运算符时的结果:
函数 A 正在执行。
真的
我的问题是为什么编译器在使用按位运算符时没有优化?就像 C# 或运算符一样,编译器已经知道参数,那么为什么它不以与按位或相同的方式处理它呢?