Dvi*_*aki 5 c++ g++ compiler-warnings visual-c++ clang++
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)
背后有原因吗?
小智 -2
虚拟是函数调用者中决定调用哪个函数的机制。它不会使该函数以某种方式表现为“虚拟”。由于您没有覆盖函数 B::memberVar(),它仍然调用 A::memberVar(),并且其行为与 A 的任何其他成员函数一样。
| 归档时间: |
|
| 查看次数: |
2452 次 |
| 最近记录: |