c ++中的Static_cast和虚方法

hun*_*y91 1 c++ virtual static-cast

在下面的代码中,由于name()是虚拟的,我希望将调用派生结构的方法.相反,什么是写出来的是"A".为什么?

#include <iostream>
using namespace std;
struct A {
    virtual string name() { return "A"; }
};
struct B : A {
    string name() { return "B"; }
};
int main (int argc, char *argv[]) {
    B b;
    cout << static_cast<A>(b).name() << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Ant*_*vin 6

static_cast<A>(b)创建一个由... A构造的类型的临时变量b.所以呼唤name()确实要求A::name().

为了观察您可能会做的多态行为

static_cast<A&>(b).name()
Run Code Online (Sandbox Code Playgroud)