C#:编译器优化、函数调用和布尔表达式短路
C#: Compiler optimization, function calls, and Boolean expression short-circuiting
假设我们有以下昂贵的功能:
bool ExpensiveOp1() { ... }
bool ExpensiveOp2() { ... }
bool ExpensiveOp3() { ... }
此外,为简单起见,假设其中 none 有副作用。
我知道如果ExpensiveOp1
或ExpensiveOp2
returnsfalse
在下面的表达式中C#可以短路:
return ExpensiveOp1() && ExpensiveOp2() && ExpensiveOp3();
但是,如果我以这种方式编写代码,编译器是否足够智能(因为缺少更好的术语)内联函数调用并利用短路?
var x = ExpensiveOp1();
var y = ExpensiveOp2();
var z = ExpensiveOp3();
return x && y && z;
不,这是有充分理由的。编译器不知道你的任何操作是否有副作用,所以如果你 运行 它们在布尔短路情况之外,它会 运行 s 它们以防你想要的副作用。
假设我们有以下昂贵的功能:
bool ExpensiveOp1() { ... }
bool ExpensiveOp2() { ... }
bool ExpensiveOp3() { ... }
此外,为简单起见,假设其中 none 有副作用。
我知道如果ExpensiveOp1
或ExpensiveOp2
returnsfalse
在下面的表达式中C#可以短路:
return ExpensiveOp1() && ExpensiveOp2() && ExpensiveOp3();
但是,如果我以这种方式编写代码,编译器是否足够智能(因为缺少更好的术语)内联函数调用并利用短路?
var x = ExpensiveOp1();
var y = ExpensiveOp2();
var z = ExpensiveOp3();
return x && y && z;
不,这是有充分理由的。编译器不知道你的任何操作是否有副作用,所以如果你 运行 它们在布尔短路情况之外,它会 运行 s 它们以防你想要的副作用。