gpt4 book ai didi

c++ - 虚拟继承 - 为什么这个输出

转载 作者:行者123 更新时间:2023-11-30 01:08:11 27 4
gpt4 key购买 nike

看看下面的代码。为什么 static_cast<D2&>(m).f() 的输出和 cout << static_cast<B&>(m).f()33 , 不是 21

struct B {
virtual int f() {return 1;}
};
struct D1 : virtual public B {
virtual int f(){return 2;}
};
struct D2 : virtual public B{};
struct M : public D1, public D2 {
virtual int f() {return 3;}
};

int main(){
M m;
cout << static_cast<D2&>(m).f();
cout << static_cast<B&>(m).f();
return 0;
}

最佳答案

因为这是虚拟分派(dispatch)的全部要点:分派(dispatch)的目标由包含调用表达式的静态指定对象的最派生对象的动态类型决定。

如果您想要虚拟分派(dispatch),您可以通过限定函数调用来绕过它:

m.B::f();
m.D1::f();
m.D2::f();

关于c++ - 虚拟继承 - 为什么这个输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43173177/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com