C++ 编译器会在局部变量隐藏另一个变量时发出警告。例如https://godbolt.org/g/TYYf8F
然而,当派生类的成员隐藏基类的成员时,没有一个主要的 C++ 编译器发出警告:
class A
{
int _memberVar = 2;
public:
virtual int memberVar()
{
return _memberVar;
}
};
class B : public A
{
int _memberVar = 3;
};
int main()
{
A* pB = new B();
return pB->memberVar(); // returns 2
}
Run Code Online (Sandbox Code Playgroud)
背后有原因吗?