我的问题基本上在标题中。基本上我已经在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
...
}
这不是确切的代码,但它说明了重点。我假设因为我&gt;列表大小下半部分不会被评估。但似乎它仍然存在,我相信这会导致Seg Fault。我知道我可以使用嵌套的ifs但是这样的眼睛和浪费空间。有什么帮助吗?
答案 0 :(得分:6)
是的,在C和C ++中&amp;&amp;和||运营商短路。
答案 1 :(得分:5)
快捷方式在C,C ++和Java中的工作方式相同。
但是,根据示例代码,如果list
为null
,则可能会出现段错误。 C ++没有Java的NullPointerException。如果list可能为null,那么您也需要测试它。
<强>更新强> 后半部分只适用于list是指针的情况。 (这似乎不是。)如果是这样的话,它会是这样的:
if (list && i < list->size() && list->get(i) == 5)
答案 2 :(得分:3)
是&&
在Java中的行为与在C ++中的行为相似。它是一个短路运算符,也是一个序列点 [在C ++中]。操作数的评估顺序很明确,即从左到右。
答案 3 :(得分:2)
C ++&amp;&amp;和||运营商也做短路。小心,也许你放一个&amp;和C ++使用tbe二进制和运算符,它不是短路的。如果您需要更多帮助,请发布更相关的代码。
答案 4 :(得分:1)
C ++短路&amp;&amp;和||就像Java一样。在if(i < list.size() && list.get(i))
中,如果list.get(i)
为false,则不会评估i < list.size()
。
答案 5 :(得分:1)
&amp;&amp;和||如果没有过载,运营商就会短路。我相信它们可能会过载,但在这种情况下,如果在过载有效的类型上使用它们,它们就不会短路。