8

最初のコード:

  if(i==0) {// do instructions here}

2番目のコード:

  if(0==i) { // do instructions here }

ブロック間の違いは何ですか?

4

8 に答える 8

31

機能的には違いはありません。
一部の開発者は、割り当てのタイプミスを回避するために2番目の形式を作成することを好みます(ミスした場合に備えて=)。これにより、コンパイラーはタイプミスを警告します。2つ目は、ヨーダ
記法として有名です。

ヨーダ記法

違いはないと言います。なぜなら、細部にまで気を配ることはできず、コンパイラに頼って大声で叫ぶことはできないからです。を書くつもりなら、を書くのではなく、==を書くことを期待する必要があります。 2番目の形式を使用すると、判読できないコードがわかりにくくなります。 また、ほとんどの主流コンパイラは、すべての警告を有効にすると(とにかくそうする必要があります)、警告を発行することにより、等式のタイプミスではなく割り当てについて警告します。===

于 2012-05-18T16:34:44.480 に答える
7

2番目のバージョンの方が安全であると思われます。

1つの等号を忘れた場合でも、iの値はゼロに変更されません。

于 2012-05-18T16:34:38.070 に答える
5

機能的には、Cでも同じです。演算子のオーバーロードのような醜いものが作用する他の言語についてはよくわかりません。

様式的には、後者は非常に直感に反しており、個人的には非常に醜いです。=重要なのは、の代わりに誤って書き込んだときにコンパイラーにエラーをスローさせることです==が、優れたコンパイラーには、とにかくこれについて警告するオプションがあるため、不要です。

于 2012-05-18T16:35:46.727 に答える
3

C ++の場合、可能性は低いですが、違いが生じる可能性があります。それは私のタイプが何であるかに依存します。例えば

struct Foo
{
    int x;
};

bool operator==(Foo lhs, int rhs)
{
    return lhs.x == rhs;
}

bool operator==(int lhs, Foo rhs)
{
    std::cout << "Hi!";
    return true;
}

もちろん、そのようなコードを書いている人は撃たれるべきです。

于 2012-05-18T16:49:41.260 に答える
2

はい、C#に関する限り同じです。より複雑な状況については、A==BとB==Aをご覧ください、違いは何ですか

于 2012-05-18T16:35:48.060 に答える
1

(0 == i)と書くと、(i = 0)が削除された場合に誤って(たとえば)単一の等号を使用するエラーが発生します。他には何もありません。

于 2012-05-18T16:34:55.670 に答える
1

=違いはありません。平等テスト()ではなく、割り当て()==を行うというよくある間違いを見つけるために2番目のものを好む人もいます。

0 = iコンパイルに失敗します

于 2012-05-18T16:34:56.470 に答える
0

C#では違いはありません。ただし、C ++ではパフォーマンスに違いがあったため、最近は両方がC#コードで使用されています。実際にはパフォーマンスについてi++と++iを考えています。0==iはC/C++での一般的なコーディングの推奨事項です。偶発的な操作としてi=0を避けてください

于 2012-05-18T16:34:47.867 に答える