要检查堆栈是否为空,我们可以使用if(stack.size())
。那为什么我们有stack.empty()
。
是否有任何条件,这些结果可能不同,或有任何优势,使用一个比另一个。
发布于 2020-05-09 10:33:15
从某种程度上说,这是一个风格的选择,。
就我个人而言,我认为依赖隐式bool转换应该仅限于具有指针类语义的事物:实际指针、智能指针、std::optional
。在这种情况下,它无处不在,感觉很自然。
在其他情况下,感觉怪怪的。尽可能清楚地表达你的意图!在我看来,if(!stack.empty())
比if(stack.size())
更清楚、更直接地传达意图。
然而,风格并不是故事的全部。如果您使用size样式作为一般规则,它可能会成为性能问题的,因为您依赖于size()
和empty()
来保持同样的速度。
想象一下没有存储其大小的链接列表类型。它的empty()
函数仍然是快速的,因为它相当于检查单个指针。但是它的size()
必须遍历整个列表来确定条目的数量。这可能是一项昂贵得多的手术。
https://stackoverflow.com/questions/61695064
复制相似问题