私はこれが簡単であることを知っていますが、以下のスニペットが実際にどのように機能するかを理解できません:
int test(int a, int b)
{
return (a==b);
}
return ステートメントは、一致した場合は 1 を返し、それ以外の場合は 0 を返し
ます。 a) ここで正確に何が起こっていますか?
b) それで、 if と else を使用するのではなく、単純に比較して返したいときにこれを使用する方が良い考えですか?
a== b
.. true の場合は に評価されtrue
、そうでない場合は に評価されfalse
ます。として評価のコピーを返しますint
。魔法は等値演算子によって行われます。
それを使用することは完全に許容されます。読みやすい。
return a == b
は、より良い言い方です:
if(a==b)
return true;
else
return false; //1 or 0 as true or false depending on the language.
a と b の値に基づいて true または false を返すブール ステートメントがあります。これは関数の戻り値の型であるため、このブール値は int にキャストされます。
これはおそらく些細な例ですが、関数「test」が真にブール値である場合は、整数ではなくブール型を返す必要があることをお勧めします。通常、int を返す場合は、次のように返します。
基本的に、return ステートメントに if ステートメントがあります。何が起こっているかというとa==b
、if
ステートメント内で true を返すということ1
です。false の場合は、 を返します0
。これは、ここで起こっていることとまったく同じです。
次のように、コードをより明確に書き直すことができます。
int test(int a, int b){
if(a==b)
return 1;
else
return 0;
}
実用性やベストプラクティスについては、あなた次第だと思います.どちらも同じことを達成しますが、あなたのやり方はもう少し簡潔です.
ここで正確に何が起こっているのですか?
if(a == b)
return 1;
else
return 0;
if と else を使用するのではなく、単純に比較して戻りたい場合は、これを使用する方が良いでしょうか?
それらは同等です。誰も他の人より優れているわけではありません。それは単なるコーディングスタイル/見栄えです。
a と b の間の「==」は、a が b と等しいかどうかをチェックする演算子として機能しています。これは、そうである場合は true (または int として 1) を返し、そうでない場合は false (0) を返します。
私の知る限り、これは同等の if ステートメントよりもきれいに見えますが、それが良いか悪いかはわかりません (コンパイラーの最適化は保留中です)。
a == b は false の true を返す式で、bool 型です。戻り値の型が int であるため、呼び出しが終了する前に評価値が暗黙的に int に変換されます。
式 (a == b) は bool 型であり、暗黙的に int に変換できます。false は 0 に変換され、true は 1 に変換されます。つまり、基本的には "if (a == b) return 1; そうでなければ 0 を返します;"、よりコンパクトです。フォーマットが悪くてすみません、携帯から入力しています
if ステートメントは単一のブール式とは異なります。if ステートメントと同様に、コンパイラは分岐予測を損なう可能性のある JUMP 命令を生成するため、プログラムのパフォーマンスが低下する可能性があります。
== b 式のように、巧妙なコンパイラーは JUMP を使用する代わりに xor 命令を生成する場合があります。これは、より効率的で、プログラマー (人間ではない:)) にとって読みやすいものです。