这是一种实现错误处理的安全方法吗?

时间:2013-11-19 02:17:26

标签: c++ linked-list stack pop

今天我看到了一个代码示例,其中通过检查指针的赋值是否有效来完成错误处理。我想如果没有,它会返回假......

我的问题是,会一直有效吗?检查它是否为nullptr不是更好吗?

bool pop (Node *&stack, int *data){

    Node *elem;
    if (!(elem = stack)) return false;  // isn't it better to say if (!stack)?

    *data = elem->data;
    stack = elem->next;

    delete elem;
    return true;

}

P.S。此代码基本上是堆栈上pop函数的实现,使用链接列表结构Node实现。

1 个答案:

答案 0 :(得分:2)

语句elem = stack也是一个表达式,此表达式的值是分配给elem的值,而不是赋值是否成功。确实,如果!(elem = stack)为空,stack为真,因为elem将被赋予stack的值,即使它为空。它还具有将值stack赋给变量elem的副作用。

这就是使用max = min = current;之类的代码的原因,它意味着max = (min = current);。反过来,用简单的英语将其读作:将表达式min = current的值赋给变量max。对(min=current)本身的评估会产生将current分配给min的副作用。实际上,整体相当于min=current; max=current;