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

时间:2014-04-03 08:20:30

标签: c++ boolean evaluation

我必须重写这段代码,假设对布尔表达式进行短路评估:

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

使得它在不假设布尔表达式的短路评估的情况下执行完全相同的任务。任何人都可以帮我解决这个问题吗?

我在互联网上搜索过,但我得到的是短路评估和非短路评估之间的差异,但是我无法找到重写其中任何一项的东西来让他们去做同一件事情。它是一个考试复习(不是家庭作业)所以这对帮助某人解决它很有帮助,所以我至少知道如何为简单的代码做到这一点。欢迎解释: - )

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

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

我会说:

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