C++警告如果在函数中重新声明成员变量

Coo*_*kie 2 c++ compiler-construction scope declaration

给出如下结构

class A {
  int test;
  void f() { int test; }
}
Run Code Online (Sandbox Code Playgroud)

我只是有一个奇怪的情况,其中f()中的代码,当引用测试时,在VS2010下编译,正确引用函数局部变量,但是,当在gcc下编译时,错误地引用了成员变量.我花了很长时间才追查.

无论如何,问题是,每次在本地函数范围内重新声明成员变量时,gcc或VS中是否有一个选项可以启用编译器警告?

Mik*_*our 7

在海湾合作委员会,-Wshadow.从文档:

每当局部变量或类型声明影响另一个变量,参数,类型或类成员(在C++中)时,或者在内置函数被遮蔽时发出警告.请注意,在C++中,如果局部变量影响struct/class/enum,编译器将不会发出警告,但如果它影响显式typedef,则会发出警告.