将短路评估转换为非短路评估

converting short-ciruit evaluation to non short-circuit evaluation

本文关键字:短路 评估 转换      更新时间:2023-10-16

我必须重写这段代码,它假设布尔表达式的短路计算:

while ((p!=NULL) && (p->val != v)) p=p->next;

这样它就可以执行完全相同的任务,而无需假设布尔表达式的短路计算。谁能帮我解决这个问题?

我已经在互联网上搜索过,但我得到的只是短路评估和非短路评估之间的区别,但我找不到任何关于重写一个或另一个让他们做同样的事情的东西。这是为了考试复习(不是家庭作业),所以这将对某人解决它有很大帮助,所以我至少知道如何为简单的代码做到这一点。欢迎解释:-)

while(true)
{
    if (p == NULL)
        break;
    if (p->val == v)
        break;
    p = p->next;
}

一些解释:原始代码依赖于短路评估。 如果p!=NULL计算结果为 false,则不会评估p->val != v。如果它始终计算第二个表达式,则可能会导致访问冲突。如果你没有 hva 短路&&运算符,你需要确保在你的代码中,只有在p!=NULL 时才计算p->val

您只需要将 NULL 的检查和 p 成员的访问拆分为两个语句。

短路评估意味着在 AND 条件中,如果第一个操作数为 false,则代码不会费心检查第二个操作数,因为它已经知道结果是"false"。

我会说:

val = null;
while (p != null && val != v)
{
    p = p->next();
    val = p->val;
}