[解決済み] if文での変数の初期化
2023-06-30 02:40:09
質問
C++17 では、変数を初期化するために
if
文の中で変数を初期化することができます。
if (int length = 2; length == 2)
//execute something
の代わりに
int length = 2;
if (length == 2)
//do something
短くなったとはいえ、コードの可読性に影響する(特にこの新機能を知らない人にとっては)ので、大規模なソフトウェア開発では良くないコーディング方法なのでしょう。
コードを短くする以外に、この機能を使うメリットはありますか?
どのように解決するのですか?
の範囲を制限しています。
length
を
if
だけで済みます。を書くことが許されたとき、私たちがもともと得ていたのと同じ利益を得ることができるわけです。
for(int i = 0; i < ... ; ++i) {
// ...
}
変数が漏れる代わりに
int i;
for(i = 0; i < ... ; ++i) {
// ...
}
短命な変数の方が良い理由はいくつかあります。しかし、いくつか挙げると
-
何かが短く生きれば生きるほど、関係のないコードの行を読むときに心に留めておく必要のある事柄は少なくなります。もし
i
がループの外に存在しないかif
ステートメントの外側に存在しないのであれば、それらの外側の値を気にする必要はありません。また、その値が意図された範囲外のプログラムの他の部分と相互作用することを心配する必要もありません (これはi
が別のループで再利用された場合に起こるかもしれません)。これによって、コードの追跡と推論が容易になります。 -
変数がリソースを保持している場合、そのリソースは今、可能な限り最短の期間だけ保持されます。そして、これは余計な中括弧なしです。また、リソースが
if
のみに関連していることも明確にされています。モチベーションを上げる例として、次のように考えてみましょう。if(std::lock_guard _(mtx); guarded_thing.is_ready()) { }
同僚がその機能を知らないなら、教えてあげましょう! 学びたくないプログラマーをなだめることは、機能を避けるための悪い言い訳です。
関連
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み] gdbを使用してもデバッグシンボルが見つからない
-
[解決済み] switch文の中で変数を宣言してはいけないのはなぜですか?
-
[解決済み] C++11 rvalues と移動セマンティクスの混乱(return 文)
-
[解決済み] 変数における const と constexpr の比較
-
[解決済み】オブジェクトの初期化で{0}が意味するものは何ですか?
-
[解決済み] インライン変数の仕組みは?
最新
-
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++でint型に無限大を設定する
-
[解決済み】Visual Studio 2015で「非標準の構文。'&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み] クラスにデフォルトコンストラクタが存在しない。
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複
-
[解決済み] 配列のベクトルを扱う正しい方法