C++ static_cast、dynamic_cast
3504 ワード
static_cast:c++のような強制タイプ変換は、コンパイラで完了し、変換エラーが報告されます.従来の自動タイプ変換、例えばshort回転int、int回転double、const回転非const、向上転換など; voidポインタと特定のタイプのポインタとの間の変換、例えばvoid*回転int*、char*回転void*など; には、double変換Complex(変換コンストラクタの呼び出し)、Complex変換double(変換タイプ変換関数の呼び出し)などの変換コンストラクタまたはタイプ変換関数のクラスと他のタイプとの間の変換があります. constを非constタイプ に変換することはできません.
dynamic_cast:虚関数を持つ派生クラスとベースクラスの直接的なポインタまたは参照の変換に使用されますが、実行時に実質的にサブクラスのポインタであれば、サブクラスに変換する際に成功することを検出する追加のオーバーヘッドがあります.
虚関数や本質が親のポインタでない場合、変換は成功しません.
dynamic_cast:虚関数を持つ派生クラスとベースクラスの直接的なポインタまたは参照の変換に使用されますが、実行時に実質的にサブクラスのポインタであれば、サブクラスに変換する際に成功することを検出する追加のオーバーヘッドがあります.
class A{
public:
virtual void f(){
}
};
class B:public A{
public:
virtual void f(){
}
};
int main()
{
A* a=new B();
B* b=new B();
if(b = dynamic_cast<B*>(a)){
cout<<"yes";
}
else{
cout<<"no";
}
}
虚関数や本質が親のポインタでない場合、変換は成功しません.