if-then-else运算符的短路评估(例如?:在C中)

时间:2017-01-19 20:45:22

标签: if-statement operators lazy-evaluation short-circuiting

我需要用任何语言编写程序,如果语言在if-then-else运算符中使用短路评估,则打印1;如果语言不使用,则打印0。

我的问题是,if-then-else运算符中的短路评估是什么意思?

它只是在&&和&和||经营者?

2 个答案:

答案 0 :(得分:1)

如果我正确地阅读了这个问题,那么是的。在实现此目的的语言中,如果您有类似

的语句
if (A || B || C || D)

一旦发现一个真实的语句,运行时就会停止评估。例如,如果A和B为假但C为真,则它将评估A,B和C但不评估D.如果您执行以下操作,这很重要:

if (a != null && a.ToString() == "abc")

短路行为意味着如果a实际上是null,那么if语句的后半部分将被执行,这是至关重要的,因为如果那不是&#39 ;在这种情况下,此语句可能会抛出一个空引用异常。如果不是因为你不得不做类似

的事情
if (a != null) {
   if (a.ToString() == "abc") {
      // ...

这显然不那么简洁。

&安培;&安培;行为方式类似:

if (A && B && C && D) ...

例如,如果Afalse,为什么还要检查其余的表达式?

就作业而言,我会给你一个提示:如果你在其中一个表达中产生副作用会怎样?

答案 1 :(得分:1)

如果有人面临类似的任务/希望了解更多关于C中if运算符短路的信息: 首先,让我们按如下方式标记if运算符的每个部分:

如果(表达式)? BlockA:BlockB;

现在,在跟随if-then-else运算符短路的PL C中,如果表达式被评估为真,则 BlockA被评估,否则仅 BlockB被评估

让我们假设现在C不跟随短路,发生的是两者 BlockA和BlockB都被评估,无论表达式的评估结果如何(听起来很愚蠢和危险,但显然是这样的它有效)