if文でfor文みたいに初期化

周回遅れですがC++17について調べていたら便利な文法が追加されたことを知りました。

    auto itr = map.find(key);
    if (itr != map.end()) // キーが存在する場合
    {
        // 略(大体itr使ってゴニョゴニョする)
    }

みたいなのが

    if (auto itr = map.find(key); itr != map.end()) // キーが存在する場合
    {
        // 略(大体itr使ってゴニョゴニョする)
    }

と書けるんですね。

findは処理が重いのでmapの要素が数万件とかになるとitrに結果を代入してチェック、存在する場合はitrから要素にアクセスするのがいいのですが、いちいちitrへの代入文をif文の前に書くのが嫌だったんです。この場合、itrのスコープがif文内なのも非常に分かりやすいです。昔のコードは変数を使いまわししまくるですごく見づらいんですよね。

参考

if文とswitch文の条件式と初期化を分離 - cpprefjp C++日本語リファレンス
タイトルとURLをコピーしました