1 行の if またはループに中括弧 (つまり {}) を使用する目的は何ですか? 質問する

1 行の if またはループに中括弧 (つまり {}) を使用する目的は何ですか? 質問する

私は C++ 講師の講義ノートを読んでいるのですが、次のように書いてありました。

  1. インデントを使用する // OK
  2. 演算子の優先順位に頼らず、常に括弧を使用してください // OK
  3. 常に { } ブロックを使用します - たとえ 1 行であっても // はOK ではありません、なぜですか ?
  4. 比較の左側に Const オブジェクト // OK
  5. 0 以上の変数には unsigned を使用する // 便利なトリック
  6. 削除後にポインタを NULL に設定する - 二重削除保護 // 悪くない

3 番目のテクニックは私にはよく分かりません。 に 1 行配置することで何が得られるのでしょうか{ ... }?

たとえば、次の奇妙なコードを見てみましょう。

int j = 0;
for (int i = 0 ; i < 100 ; ++i)
{
    if (i % 2 == 0)
    {
        j++;
    }
}

これを次のように置き換えます:

int j = 0;
for (int i = 0 ; i < 100 ; ++i)
    if (i % 2 == 0)
        j++;

1 番目のバージョンを使用する利点は何ですか?

ベストアンサー1

iを増分するときにも変更してみましょうj:

int j = 0;
for (int i = 0 ; i < 100 ; ++i)
    if (i % 2 == 0)
        j++;
        i++;

ああ、大変! Python から来たので、これは問題ないように見えますが、実際にはそうではありません。これは次のコードと同等です。

int j = 0;
for (int i = 0 ; i < 100 ; ++i)
    if (i % 2 == 0)
        j++;
i++;

もちろん、これは愚かな間違いですが、経験豊富なプログラマーでも犯す可能性のある間違いです。

もう一つの非常に良い理由は、ta.speot.is の回答

3 番目に思いつくのは、ネストされた ですif

if (cond1)
   if (cond2) 
      doSomething();

ここで、条件が満たされていないdoSomethingElse()場合(新機能)を実行したいとします。つまり、次のようになります。cond1

if (cond1)
   if (cond2) 
      doSomething();
else
   doSomethingElse();

これは明らかに間違っています。なぜなら はelse内部の と関連付けられるからですif


編集: 注目を集めているので、私の見解を明確にしておきます。私が答えていた質問は次のとおりです。

1 番目のバージョンを使用する利点は何ですか?

すでに述べたとおりです。メリットはいくつかあります。しかし、私の意見では、「常に」というルールが常に適用されるわけではありません。そのため、私は全面的に支持しません。

常に { } ブロックを使用します - たとえ 1 行であっても // は OK ではありません。なぜでしょうか ?

常にブロックを使用するべきだと言っているのではありませ{}ん。条件と動作が十分に単純な場合は、使用しないでください。後から誰かが来て、機能を追加するためにコードを変更する可能性があると思われる場合は、使用してください。

おすすめ記事