1. ホーム
  2. c++

[解決済み】C++で不要な中括弧は?

2022-04-15 03:43:59

質問

今日、同僚のコードレビューをしているときに、奇妙なものを見ました。彼は新しいコードをこのように中括弧で囲んでいたのです。

Constructor::Constructor()
{
   existing code

   {
      New code: do some new fancy stuff here
   }

   existing code
}

その結果があるとすれば、それはどのようなものでしょうか?このようなことをする理由は何でしょうか?この習慣はどこから来るのでしょうか?

編集する。

以下の意見といくつかの質問に基づいて、私はすでに答えをマークしているにもかかわらず、質問にいくつか追加する必要があると感じています。

環境は組み込み機器です。C++の衣をまとったレガシーなC言語コードが多い。CからC++になった開発者がたくさんいる。

この部分のコードにはクリティカルな部分はない。私はこの部分のコードでしか見たことがありません。大きなメモリ確保は行われておらず、いくつかのフラグが設定され、ビットをいじっているだけです。

中括弧で囲まれたコードは、こんな感じです。

{
   bool isInit;
   (void)isStillInInitMode(&isInit);
   if (isInit) {
     return isInit;
   }
}

(コードは気にせず、中括弧だけにしてください... ;) ) 中括弧の後は、さらにビット操作、状態チェック、基本的な信号の出力があります。

その人に話を聞いたところ、変数のスコープを制限したいとか、名前の衝突とか、よくわからない動機でした。

私の見解では、これはかなり奇妙なことで、中括弧は私たちのコードにあるべきでないと思うのです。すべての回答で、なぜ中括弧でコードを囲むことができるのか、いくつかの良い例を見ましたが、代わりにコードをメソッドに分離すべきではないでしょうか?

どのように解決するのですか?

新しいスコープができ、そこで新しい(自動)変数をより "きれいに" 宣言できるので、時々いいことがあります。

C++ は、どこでも新しい変数を導入できるので、それほど重要ではないかもしれませんが、おそらくその習慣は C C99まではこんなことできなかったのに :)

以来 C++ はデストラクタを持っているので、スコープが終了するときにリソース (ファイル、ミューテックスなど) を自動的に解放しておくと便利でしょう。これは、メソッドの開始時にリソースを取得するよりも、短い時間で共有リソースを保持できることを意味します。