将派生类转换为基础

Pil*_*pel 12 c++

在这里进行什么类型的演员表演B::get()

class A {
public:
    A() : a(0) {}
    int a;
};

class B : public A {
public:
    A* get() {
        return this; //is this C-style cast?
    }
};

int main()
{
    B b;
    cout << b.get()->a << "\n";

    system("pause");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在着名的API中看到过这种代码.这是更好的做法static_cast<A*>(this);吗?

Tar*_*ama 10

这是标准的派生到基指针转换.规则是指向D某些const/ volatile资格的指针可以转换为指向B具有相同限定符的指针(如果B是基类)D.

标准转换是具有内置含义的隐式转换,并且与诸如static_castC风格的转换之类的事物是分开的概念.

通常情况下,最好尽可能依赖隐式转换.显式转换会增加更多代码噪音,并可能隐藏一些维护错误.

  • 我建议特别回答他的问题:"不,使用`static_cast`不是更好的做法 - 事实上,这是更糟糕的做法.如果你不需要它们,总是避免演员." (3认同)