[解決済み】C++で不要な中括弧は?
質問
今日、同僚のコードレビューをしているときに、奇妙なものを見ました。彼は新しいコードをこのように中括弧で囲んでいたのです。
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++
はデストラクタを持っているので、スコープが終了するときにリソース (ファイル、ミューテックスなど) を自動的に解放しておくと便利でしょう。これは、メソッドの開始時にリソースを取得するよりも、短い時間で共有リソースを保持できることを意味します。
関連
-
[解決済み】Visual Studio 2015で「非標準の構文。'&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み】IntelliSense:オブジェクトに、メンバー関数と互換性のない型修飾子がある
-
[解決済み】「std::operator」で「operator<<」にマッチするものがない。
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】1つ以上の多重定義されたシンボルが見つかる
-
[解決済み] なぜリストの初期化(中括弧を使用)が他の方法より優れているのですか?
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み】高放射能環境下で使用するアプリケーションのコンパイルについて
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】「std::operator」で「operator<<」にマッチするものがない。
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み】 while(cin) と while(cin >> num) の違いは何ですか?)
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる