以下是在Visual Studio 2015中测试的最小工作示例:
class A
{
virtual void X() {}
};
class B : public A
{
public:
virtual bool Y() { return false; }
};
class C : public B
{
public:
virtual bool Y() override { return true; }
};
int main()
{
B* b = new C;
bool result = b->Y();
}
result
的值是预期的true
。但是,监视表达式b->Y()
的计算结果为false
。
如果我在上面的X
课程中注释掉了虚拟函数A
,那么在监视表达式中评估的result
和b-Y()
都是true
。
在我看来,调试器评估引擎只尊重继承链中最顶层的虚拟表...这是正确的吗?我能做些什么来解决这个问题吗?