c++复习(九)——类型转换

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

执行期语义,最常用的用途是在函数指针类型之间进行转换。但是要小心使用

你可能感兴趣的:(c++复习(九)——类型转换)