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

Short Circuit evaluation of an if-then-else operator (e.g. ?: in C)

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

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

它只是 && 和 || 中发生的惰性求值吗?运营商?

如果我没看错这个问题,那么是的。在实现这个的语言中,如果你有一个像

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

一旦发现语句为真,运行时就会停止计算。例如,如果 A 和 B 为假但 C 为真,它会评估 A、B 和 C 而不是 D。如果您执行以下操作,这一点很重要:

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

short-circuit 行为意味着如果 a 实际上是 null,则不会执行此 if 语句的后半部分,这很关键,因为如果那不是' 那么这个语句可能会抛出空引用异常。如果不是这样,你将不得不做类似

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

明显不够简洁

&& 的行为方式类似:

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

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

在作业方面,我给你一个提示:如果你在其中一个表达式中有副作用会发生什么?

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

if(表达式)?块 A : 块 B;

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

现在假设 C 不遵循短路,发生的情况是 BlockA 和 BlockB 的计算结果与表达式的计算结果无关(听起来很愚蠢和危险,但显然这就是它的工作原理)