3

我的问题基本上在标题中。基本上我已经了解到,在 Java 中 && 运算符的作用类似于短路,因此如果第一个条件的计算结果为 false,它不会查看语句的其余部分。我假设在 c++ 中就是这种情况,但我正在编写一些代码,它首先检查索引是否超过列表大小,然后将列表中的索引与另一个数字进行比较。就像是:

//let's say list.size()=4;

for(int i=0; i<10; i++)
{
   if(i < list.size() && list.get(i) == 5)
       //do something
   ...
}

这不是确切的代码,但它说明了这一点。我假设由于 i > 列表大小,后半部分不会被评估。但它似乎仍然存在,我相信这会导致 Seg Fault。我知道我可以使用嵌套的 if,但这太碍眼而且浪费空间。有什么帮助吗?

4

6 回答 6

6

是的,在 C 和 C++ 中 && 和 || 运营商短路。

于 2010-10-05T16:46:13.633 回答
5

快捷方式在 C、C++ 和 Java 中的工作方式相同。

但是,给定示例代码,如果listis ,您可能会遇到段错误null。C++ 没有等效于 Java 的 NullPointerException。如果 list 可能为空,您也需要对此进行测试。

更新 后半部分仅适用于 list 是指针的情况。(这似乎不是。)如果是这样的话,它看起来像:

if (list && i < list->size() && list->get(i) == 5)
于 2010-10-05T16:51:04.100 回答
3

Yes&&在 Java 中的行为与在 C++ 中的行为相似。它是一个短路运算符,也是一个序列点[在 C++ 中]。操作数的求值顺序是明确定义的,即从左到右。

于 2010-10-05T16:51:48.050 回答
2

C++ && 和 || 运营商也做短路。小心,也许你放了一个 & 并且 C++ 使用的是二进制和运算符,这不是短路的。如果您需要更多帮助,请发布更多相关代码。

于 2010-10-05T16:46:03.267 回答
1

C++ 短路 && 和 || 就像Java一样。in if(i < list.size() && list.get(i)),如果为假,list.get(i)则不会被评估。i < list.size()

于 2010-10-05T16:46:04.483 回答
1

&& 和 || 如果没有过载,操作符会短路。但是,我相信它们可能会被重载,在这种情况下,如果用于重载有效的类型,它们不会短路。

于 2010-10-05T17:05:56.930 回答