考虑我有以下内容:
edge some_edge;
std::priority_queue<edge> my_queue;
即使队列可能为空,编写这样的“if”是否安全?
if ((my_queue.size() > 0) && (my_queue.top().weight < some_edge.weight)) {
do_something;
}
这个怎么样?
if ((my_queue.top().weight < some_edge.weight) && (my_queue.size() > 0)) {
do_something;
}
如果左操作数的计算结果为 false,则计算操作数之间的运算符为“and”的表达式会停止吗?
最佳答案
C++ 中的 if
语句是从左到右关联的,逻辑 bool 运算符 &&
和 ||
是短路的,所以是的,像下面这样的语句是安全的,因为它保证您首先检查大小(假设这些运算符没有恶意重载):
if(myqueue.size() > 0 && myqueue.top().whatever) {
// ...
}
反之则不然,因为您在弹出队列后检查 size()
的返回值。
顺便说一句,std::priority_queue
提供了一个 empty()
函数,我/许多人更喜欢 size() > 0
,但这也有效。
if(!myqueue.empty() && myqueue.top().whatever()) {
// ...
}
关于c++ - 'if' 表达式的求值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10196898/