我想弄清楚這個代碼示例返回行中的「和」語句是怎麼回事,有人可以告訴我這些「和」語句的目的是什麼在返回一個函數是? 如果其中只有一個是錯誤的,它會將錯誤返回給調用它的函數嗎?並在語句返回C++
return !UsedInRow(board, row, num) && !UsedInCol(board, col, num) &&
!UsedInBox(board, row - row % 3 , col - col % 3, num);
我想弄清楚這個代碼示例返回行中的「和」語句是怎麼回事,有人可以告訴我這些「和」語句的目的是什麼在返回一個函數是? 如果其中只有一個是錯誤的,它會將錯誤返回給調用它的函數嗎?並在語句返回C++
return !UsedInRow(board, row, num) && !UsedInCol(board, col, num) &&
!UsedInBox(board, row - row % 3 , col - col % 3, num);
這相當於
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;
由於短路&&
的性質和事實,即評價是由左到右。
(即使該函數的參數通過引用傳遞和功能修改這成立,作爲&&
是測序點。)
如果其中只有一個是假的,它會返回false到調用它的函數嗎?答案是肯定的。 這將停止進一步函數的計算爲False並且任何值=> False。
這將基於UsedIn *函數返回的值返回True或False。 這是爲了檢查數字'num'是否可以在Suduko中插入。這將檢查數字是否可以插入給定的單元格,只要它存在於該行,列或框中。
UsedInRow
和UsedInCol
都是返回bool
(或可以轉換爲bool
的類型)的函數。 &&
運算符只是將函數的返回值鏈接在一起,導致最後的bool
結果產生true
或false
,然後返回。
請注意,由於短路評估,並非所有功能都需要運行,也就是說,如果三個布爾表達式中的一個是false
,那麼(因爲&&
)結果不可能是true
,因此尚未評估的函數將不會被評估。
是的,它的工作原理與if
語句完全相同。如果任何Used
函數返回true,則整個返回值將計算爲false。
如果!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
值
的& &操作返回一個布爾值(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;
它只是返回的結果布爾表達式。 –
'&&'操作符是*表達式*的一部分,而不是語句。它和其他地方的邏輯和'&&'一樣。 –
你問什麼函數'AND(x1,x2,...,xn)'哪裏'x'是布爾變量返回?如果是這樣,那麼在啓動任何編程語言之前應該知道。 – DeiDei