コンパイラの警告 (レベル 4) C4456

'identifier' を宣言すると、以前のローカル宣言が隠蔽されます

ローカル スコープで identifier を宣言すると、同じ名前の以前のローカル宣言が隠蔽されます。 この警告は、ローカル スコープでの identifier への参照が、以前のローカルではなく、ローカルで宣言されたバージョンに解決されることを知らせるものです。これは、意図と異なる場合があります。 この問題を解決するには、他のローカル名と競合しないローカル変数名を指定することをお勧めします。

次の例では、ループ制御変数 int x と、member_fn のローカル変数 double x が同じ名前であるため、C4456 が発生します。 この問題を解決するには、ローカル変数に別の名前を使用します。

// C4456_hide.cpp
// compile with: cl /W4 /c C4456_hide.cpp

struct S {
    void member_fn(unsigned u) {
        double x = 0;
        for (int x = 0; x < 10; ++x) {  // C4456
            u += x; // uses local int x
        }
        x += u; // uses local double x
    }
} s;