1. ホーム
  2. c++

[解決済み] 1行のifやループに中括弧(={})を使用する目的は何ですか?

2022-03-17 13:29:08

質問

C++の講師の講義ノートを読んでいるのですが、以下のように書かれています。

<ブロッククオート
  1. インデントを使用する // OK
  2. 演算子の優先順位に頼らない - 常に括弧を使用する // OK
  3. 常に { } ブロックを使用する - たとえ1行でも //. 不可 なぜ?
  4. 比較の左側にあるConstオブジェクト // OK
  5. unsigned は >= 0 の変数に使用する // 良いトリックだ
  6. 削除後にポインタをNULLにする - 二重削除防止 // 悪くない

3つ目のテクニックは、私にはよくわからないのですが、1行を a { ... } ?

例えば、こんな変なコードを見てみましょう。

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++;

1stバージョンを使用するメリットは何ですか?

解決方法は?

を変更することも試みましょう。 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さんの回答 .

A サード を入れ子にしたものが考えられます。 if 's:

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

では、今、次のようにしたいとします。 doSomethingElse() いつ cond1 が満たされない(新機能)。そこで

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

というのは明らかに間違っています。 else は内側の if .


編集部:注目されているようなので、私の見解を明らかにします。私が答えていた質問は

1stバージョンを使用するメリットは何ですか?

どのように説明しましたか。メリットもあるのですが しかし、IMOでは、"always"のルールが常に適用されるわけではありません。だから、私は以下のことを全面的に支持するわけではありません。

<ブロッククオート

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

とは言いません。 いつも を使用します。 {} ブロックを作成します。単純な条件や動作であれば、「しない」。もし、誰かが後から入ってきて、機能を追加するためにコードを変更するかもしれないと思ったら、そうしてください。