今天我看到了一个代码示例,其中通过检查指针的赋值是否有效来完成错误处理。我想如果没有,它会返回假......
我的问题是,会一直有效吗?检查它是否为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
实现。
答案 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;