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) ...
例如,如果 A
是 false
,为什么还要检查其余的表达式?
在作业方面,我给你一个提示:如果你在其中一个表达式中有副作用会发生什么?
如果有人面临类似的任务/想了解更多关于 C 中 if 运算符短路的信息:
首先,让我们将 if 运算符的每个部分标记如下:
if(表达式)?块 A : 块 B;
现在,在 if-then-else 运算符短路后的 PL C 中,如果表达式被评估为真,则 仅 BlockA 被评估,否则 仅 BlockB被评估
现在假设 C 不遵循短路,发生的情况是 BlockA 和 BlockB 的计算结果与表达式的计算结果无关(听起来很愚蠢和危险,但显然这就是它的工作原理)
我需要用任何语言编写一个程序,如果该语言在 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) ...
例如,如果 A
是 false
,为什么还要检查其余的表达式?
在作业方面,我给你一个提示:如果你在其中一个表达式中有副作用会发生什么?
如果有人面临类似的任务/想了解更多关于 C 中 if 运算符短路的信息: 首先,让我们将 if 运算符的每个部分标记如下:
if(表达式)?块 A : 块 B;
现在,在 if-then-else 运算符短路后的 PL C 中,如果表达式被评估为真,则 仅 BlockA 被评估,否则 仅 BlockB被评估
现在假设 C 不遵循短路,发生的情况是 BlockA 和 BlockB 的计算结果与表达式的计算结果无关(听起来很愚蠢和危险,但显然这就是它的工作原理)