給出連接&&
的兩個條件。我知道評估的順序是從左到右。但是,如果第一個條件解決爲false,那麼第二個條件保證不被評估?是否保證if語句不被評估超過必要?
#define SIZE
bool array[SIZE];
int index;
// play with variables
// ...
if(index < SIZE && array[index])
{
// ...
}
在這個例子中,如果第一條件是假的第二不能進行評估,因爲陣列中的訪問將是超出範圍。
順便說一句,我不能簡單地嵌套條件與兩個if
陳述,因爲實際上我需要像(!(in_range && get_element))
反相。使用嵌套語句,我需要使用goto
跳過下面的代碼塊。
這幾乎與if語句無關。 if語句也只執行一次,但你詢問的事實上是'&&'**操作符**的行爲。 – 2013-05-21 09:09:43
如果它能更好地匹配實際問題,請隨時編輯標籤和問題標題。 – danijar
雖然最精確的重複是上面的一個,但答案在這裏更好:http://stackoverflow.com/questions/5683026/logical-comparisons-is-left-to-right-evaluation-guaranteed,以及在這裏: http://stackoverflow.com/questions/628526/is-short-circuiting-boolean-operators-mandated-in-cc-and-evaluation-order – jogojapan