c++ - 'if' 表达式的求值

标签 c++ if-statement short-circuiting

考虑我有以下内容:

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/

相关文章:

c++ - 如何使用 std::binary_search 或 std::sort 对结构数组进行排序

C++:如何覆盖具有相同接口(interface)的特定类的方法

c++ - 如何在 OpenCv 中使用变换矩阵变换图像?

java - 具有不同类型返回的功能接口(interface)中的 Null

sql - 相当于SQL中的VB AndAlso?

compiler-construction - 使用程序进行短路评估

c++ - 将引用分配给局部变量,如果局部变量超出范围,它会超出范围吗?

java - 使用监听器的 ANTLR 4 解释器

java - 在 if 中放置一个返回 boolean 值的方法在功能上等同于直接调用该方法吗?

swift - Swift Switch 会短路吗?