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;
不抛出编译时错误来转换不相关类型的指针.
C cast语法将根据所涉及的类型执行不同的操作.它可以做的一件事是reinterpret_cast
.
这是你不应该使用C cast语法的原因之一,而是坚持使用C++强制转换.使用C++强制转换,您可以获得所要求的操作,而不是其他可能的操作.
c ++编译器不应该允许这样做,并且应该抛出编译时错误.
C兼容性是C++成功的原因之一.C不应该有这种'多态'强制转换语法,但它确实和C++需要兼容.如果您正在编写新的C++代码,则不应使用旧语法.
在一些编译器可以禁用ç风格转换使用类似:-Werror=old-style-cast
.