我确信您已经阅读过相关文档短路运算符,并且对于逐元素运算符.
一个重要的区别是逐元素运算符可以对数组进行操作,而短路运算符仅适用于标量逻辑操作数。
但关键的区别可能是短路问题。对于短路运算符,表达式从左到右进行计算,一旦可以确定最终结果,则不再计算其余项。
例如,考虑
x = a && b
If a
评估为false
,那么我们知道a && b
评估为false
不管什么b
评估为.所以没必要评价b
.
现在考虑这个表达式:
NeedToMakeExpensiveFunctionCall && ExpensiveFunctionCall
我们想象的ExpensiveFunctionCall
需要很长时间来评估。如果我们可以执行一些其他便宜的测试,使我们能够跳过对ExpensiveFunctionCall
,那么我们就可以避免调用 ExpenseFunctionCall。
所以,假设NeedToMakeExpensiveFunctionCall
评估为false
。在这种情况下,因为我们使用了短路运算符,ExpensiveFunctionCall
不会被调用。
相反,如果我们使用逐元素运算符并编写如下函数:
NeedToMakeExpensiveFunctionCall & ExpensiveFunctionCall
然后调用ExpensiveFunctionCall
永远不会被跳过。
事实上MATLAB 文档我希望您已经阅读过,其中包含一个很好的示例,很好地说明了这一点:
x = (b ~= 0) && (a/b > 18.5)
在这种情况下我们无法执行a/b
if b
为零。因此测试b ~= 0
。使用短路运算符意味着我们可以避免计算a/b
when b
为零,因此可以避免可能出现的运行时错误。显然,逐元素逻辑运算符无法避免运行时错误。
有关短路评估的详细讨论,请参阅维基百科文章就此主题而言。