c++復習(九)——タイプ変換

1879 ワード

static_cast
static_cast機能は基本的にcのタイプ変換と一致する.しかし、cのようにstructをintタイプに変換することはできません.また、式の定数は除去できません.
    cout<<"static_cast:"<<endl;
    int i=12,j=5;
    double res = static_cast<double>(i)/j;
    cout<<"res = "<<res<<endl;
    float f = 2.3;
    void* pf = &f;
    float * ff = static_cast<float*>(pf);
    cout<<"*ff = "<<*ff<<endl;

const_cast
const_castは式の定数性を解消するためにしか使用できません.それを使って他のものを変換したい場合は、エラーが発生します.
    int cd = 11;
    const int * pcd = &cd;
// int *pd = static_cast<int*>(pcd);//error
    int* pd = const_cast<int*>(pcd);
    cout<<"*pd = "<<*pd<<endl;

dynamic_cast
dynamic_castはクラスの継承関係に沿って安全にタイプ変換を行うために使用され、失敗すると空のポインタを返すか、異常を投げ出す.もちろん定数性も解消できない.
reinterpret_cast
実行期間の意味では、関数ポインタタイプ間で変換するのが最も一般的です.でも気をつけて