1. ホーム
  2. c++

[解決済み] 中括弧内のForループ

2022-05-13 17:32:06

質問

このようなfor-loopのレイアウトに出会ったことがあります。

#include <iostream>
int main()
{
    {
        for (int i = 0; i != 10; ++i)
        {
            std::cout << "delete i->second;" << std::endl;
        }
    }

    {
        for (size_t i = 0; i < 20; ++i)
        {
            std::cout << "delete m_indices[i];" << std::endl;
        }
    }
    return 0;
}

この中括弧の余分なレイヤーは何のためなのでしょうか?これは私たちのコードベースに何度か登場します。

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

昔々、遠い昔のこと。 VS6 が存在し、人気を博していました。 しかし、多くの C++ 標準に準拠できませんでした。標準が正式にリリースされる直前 (同じ年) にリリースされたので、当時は妥当だったのですが、私の知る限りでは、標準のドラフトに準拠していました。

草案と正式な標準の間で変更された標準の 1 つは、最初のセクションで作成された for ループ変数の有効期限でした。

{
    for (int i=0; i<1; ++i){}
    for (int i=0; i<2; ++i){}
}

なぜなら i が2番目のforループで再定義されたからです。

他のコンパイラーもこのバグに悩まされていましたが、VS6 を強調したのは、標準のリリース後何年も Visual Studio の唯一のバージョンであり続け、この特定の問題に対するアップデートをリリースしなかったため、より大きな影響を与えたことを意味します。

これに対する解決策は、あなたが示したように、全体の for ループをそれ自身のスコープに強制することです。