簡體   English   中英

c ++中的&&與Java中的&&表現相同嗎?

[英]Does && in c++ behave the same as && in Java?

我的問題基本上在標題中。 基本上我已經了解到,在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。 我知道我可以使用嵌套的ifs但是這樣的眼睛和浪費空間。 有幫助嗎?

是的,在C和C ++中是&&和|| 運營商短路。

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

但是,給定示例代碼,如果listnull ,則可能會出現段錯誤。 C ++沒有Java的NullPointerException。 如果list可能為null,那么您也需要測試它。

更新后半部分僅適用於list是指針的情況。 (這似乎不是。)如果是這種情況,它看起來像:

if (list && i < list->size() && list->get(i) == 5)

&&在Java中與在C ++中表現相似。 它是一個短路操作符,也是一個序列點 [在C ++中]。 操作數的評估順序是明確定義的,即從左到右。

C ++ &&和|| 運營商也做短路。 小心,也許你把一個&和C ++使用tbe二進制和運算符,它不是短路的。 如果您需要更多幫助,請發布更相關的代碼。

C ++短路&&和|| 就像Java一樣。 if(i < list.size() && list.get(i)) ,如果i < list.size()為false,則不會計算list.get(i)

&&和|| 如果沒有過載,運營商就會短路。 我相信它們可能會過載,但在這種情況下,如果在過載有效的類型上使用它們,它們就不會短路。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM