为什么在C++中,一个类的指针可以被转换为另一个类的指针?

Kri*_*Oza 2 c++ pointers casting

class A
{
public:
    void display()
    {
        cout << "class A\n";
    }
};

class B
{
public:
    void show()
    {
        cout << "class B\n";
    }
};

int main()
{
    A* aPtr = new A;
    B* bPtr = new B;
    B* bPtr2 = (B*) aPtr;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,为什么在C++中允许将一个类类型的指针强制转换为另一个类类型.由于这两个类不相关,为什么B* bPtr2 = (B*) aPtr;不抛出编译时错误来转换不相关类型的指针.

bam*_*s53 6

C cast语法将根据所涉及的类型执行不同的操作.它可以做的一件事是reinterpret_cast.

这是你不应该使用C cast语法的原因之一,而是坚持使用C++强制转换.使用C++强制转换,您可以获得所要求的操作,而不是其他可能的操作.

c ++编译器不应该允许这样做,并且应该抛出编译时错误.

C兼容性是C++成功的原因之一.C不应该有这种'多态'强制转换语法,但它确实和C++需要兼容.如果您正在编写新的C++代码,则不应使用旧语法.

在一些编译器可以禁用ç风格转换使用类似:-Werror=old-style-cast.