2017-07-11 13 views
-2

私はこのコードサンプルの戻り行にある "and"ステートメントで何が起こっているのか把握しようとしています。機能の復帰では? それらのうちの1つがfalseの場合、それを呼び出す関数にfalseが返されますか?Returnでのステートメント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

これらのうちの1つがfalseの場合、それを呼び出す関数にfalseが返されますか?答えは「はい」です。 これは、False AND any任意の値=> Falseとして、さらなる関数の計算を停止します。

これは、UsedIn *関数によって返された値に基づいてTrueまたはFalseを返します。 Sudukoに数字「num」を挿入できるかどうかを確認します。これは、その行、列またはボックスに存在する場合、そのセルに数値を挿入できるかどうかをチェックします。

0

UsedInRowUsedInCol両方boolを返す関数(又はboolに変換することができるタイプ)です。 &&演算子は、関数の戻り値を連鎖させるだけで、結果はboolとなり、結果はtrueまたはfalseとなり、返されます。

この場合、短絡評価のためにすべての関数を実行する必要はないことに注意してください。つまり、3つのブール式の結果のいずれかがfalseの場合(&&のため)、結果はtrueであり、まだ評価されていない関数は評価されません。

-1

はい、これはifの記述とまったく同じです。 Used関数のいずれかがtrueを返すと、戻り値全体がfalseと評価されます。

0

を、これは、それがその後、return文がfalseを返した場合の文!UsedInCol(board, col, num)は現在実行されます第二!UsedInRow(board, row, num) trueを返しだけにしている場合、その後return文は自動的に他の二つの文

を実行せずにflaseを返しますfalseを返すように実行し!UsedInRow(board, row, num)場合そうでない場合はfalse第三文を返します。それは偽

を返します。今、この文は真であると評価され !UsedInBox(board, row - row % 3 , col - col % 3, num)場合 return文は、他trueを返します

を実行されます

だからreturnの文から真取得するために、すべての3つの条件がtrue

-1

& &オペレータが(trueまたはfalse)bool値を返しますを取得するために評価されるべきであるので、式は同等です:

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; 
関連する問題