C++的显示转换

C风格的转换只是在括号中指定目标类型。标准的C++包括一个显式的转化语法:

static_cast: 用于“良性”和“适度良性”转换,包括不用强制转换(例如自动类型转换)

const_cast: 对const和/或volatile进行转换

reinterpret_cast: 转换为完全不同的意思。这是所有的转换中最危险的

dynamic_cast: 用于类型安全的向下转换

 

static_cast:

    // Typical castless conversions:
    l=i;
    f=i;

    // Also works:
    l=static_cast<long>(i);
    f=static_cast<float>(i);

    // Forcing a conversion from void*
    void* vp=&i;
    // Old way produces a dangerous conversion:
    float* fp=(float*)vp;
    // The new way is equally  dangerous:
    fp=static_cast<float*>(vp);

 

const_cast:

如果从const转换为非const或者从volatile转换成非volatile,可以使用const_cast

    const int ci=0;
    int* j=(int*)&ci;
    j=const_cast<int*>(&ci);

    // Error
    // long* lp=const_cast<long*>(&ci);

    volatile int k=0;
    int* u=const_cast<int*>(&k);

 

reinterpret_cast:

这是最不安全的转换机制。reinterpret_cast把对象假想为模式,仿佛它是一种完全不同类型的对象。

posted @ 2012-09-16 14:59  HelloWorld.Michael  阅读(308)  评论(0编辑  收藏  举报