2017-07-11 107 views
-2

我想弄清楚這個代碼示例返回行中的「和」語句是怎麼回事,有人可以告訴我這些「和」語句的目的是什麼在返回一個函數是? 如果其中只有一個是錯誤的,它會將錯誤返回給調用它的函數嗎?並在語句返回C++

return !UsedInRow(board, row, num) && !UsedInCol(board, col, num) && 
     !UsedInBox(board, row - row % 3 , col - col % 3, num); 
+4

它只是返回的結果布爾表達式。 –

+2

'&&'操作符是*表達式*的一部分,而不是語句。它和其他地方的邏輯和'&&'一樣。 –

+0

你問什麼函數'AND(x1,x2,...,xn)'哪裏'x'是布爾變量返回?如果是這樣,那麼在啓動任何編程語言之前應該知道。 – DeiDei

回答

4

這相當於

bool a; 
a = UsedInRow(board, row, num); 
if (a) return false; 
a = UsedInCol(board, col, num); 
if (a) return false; 
a = UsedInBox(board, row - row % 3 , col - col % 3, num); 
if (a) return false; 
return true; 

由於短路&&性質和事實,即評價是由左到右。

(即使該函數的參數通過引用傳遞和功能修改這成立,作爲&&測序點。)

0

如果其中只有一個是假的,它會返回false到調用它的函數嗎?答案是肯定的。 這將停止進一步函數的計算爲False並且任何值=> False。

這將基於UsedIn *函數返回的值返回True或False。 這是爲了檢查數字'num'是否可以在Suduko中插入。這將檢查數字是否可以插入給定的單元格,只要它存在於該行,列或框中。

0

UsedInRowUsedInCol都是返回bool(或可以轉換爲bool的類型)的函數。 &&運算符只是將函數的返回值鏈接在一起,導致最後的bool結果產生truefalse,然後返回。

請注意,由於短路評估,並非所有功能都需要運行,也就是說,如果三個布爾表達式中的一個是false,那麼(因爲&&)結果不可能是true,因此尚未評估的函數將不會被評估。

-1

是的,它的工作原理與if語句完全相同。如果任何Used函數返回true,則整個返回值將計算爲false。

0

如果!UsedInRow(board, row, num)這個執行返回false,那麼return聲明將自動不執行其他兩個語句

如果!UsedInRow(board, row, num)返回true只有第二條語句!UsedInCol(board, col, num)將得到執行,如果它返回false,那麼return語句返回FLASE現在將返回false,否則第三條語句將得到執行

現在,如果!UsedInBox(board, row - row % 3 , col - col % 3, num)這個語句評估爲真return語句將返回否則真就返回false

因此,爲了從return說法得到真正的所有三個條件進行評估,以獲得true

-1

的& &操作返回一個布爾值(true或false),這樣的表達是等價於:

if (!UsedInRow(board, row, num) && !UsedInCol(board, col, num) && 
    !UsedInBox(board, row - row % 3 , col - col % 3, num) 
    return true; 
else 
    return false; 

也可能會發現某種這些表達式也持同樣的結果:

return (!UsedInRow(board, row, num) && !UsedInCol(board, col, num) && !UsedInBox(board, row - row % 3 , col - col % 3, num))?true:false;