【发布时间】:2017-11-08 15:47:00
【问题描述】:
当局部变量遮蔽另一个变量时,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
}
这背后有什么原因吗?
【问题讨论】:
-
好的,所以 B 包含两个成员,为什么这消除了警告的需要?
-
@alain 谢谢。我发誓在问之前我已经搜索过了。似乎还是没有答案。 :-(
标签: c++ visual-c++ g++ compiler-warnings clang++