编译器警告(等级 4)C4456
“identifier”的声明隐藏了上一个本地声明
本地作用域中的标识符声明隐藏了同名的前一个本地声明的声明。 此警告指示在本地作用域中对 identifier 的引用将解析为本地声明的版本,而不是之前的本地,这可能是你的意图,也可能不是。 若要解决此问题,建议提供不与其他本地名称冲突的局部变量名称。
示例
以下示例生成 C4456,因为循环控制变量 int x
和 member_fn
中的局部变量 double x
具有相同的名称。 若要解决此问题,请为局部变量使用不同的名称。
// 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;
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈