1. static_cast的基本用法

static_cast主要用于进行比较自然且低风险的转换,类似整形和浮点型,字符型之间的转换。另外如果对象所在的类重载了类型转换 运算符T,则该对象也可以使用static_cast进行到T类型之间的转换,static_cast不能用在不同类型的指针之间的转换,包括整形和指针之间的转换,也不能用于不同类型的引用之间的转换,因为这些转换都是高风险的。

#include <iostream>
int main()
{

    int iValue = 65;  // 'A'
    char cValue,cValueError;
    double dValue;

    //将int转为char类型,有风险
    cValue = static_cast<char>(iValue);
    std::cout<<"cValue Value is "<<cValue<<std::endl;
    //ASCII前32个字符都是不可见的,是不能正确打印的
    iValue = 30;
    cValueError = static_cast<char>(iValue);
    std::cout<<"cValueError Value is "<<cValueError<<std::endl;
    //int转double完全没问题
    dValue = static_cast<double>(iValue);
    std::cout<<"dValue value is "<<dValue<<std::endl;
    dValue = 3.14f;
    //double转int会丢失精度
    iValue = static_cast<int>(dValue);
    std::cout<<"iValue values is "<<iValue<<std::endl;
    /******************************指针篇*************************************/
    int testInt = 100;
    int *pInt = &testInt;
    char *pChar = nullptr;
    double *pDouble = nullptr;

    //static_cast不能用于不同类型指针和引用之间的转换,这种转换是高风险的
    //char占用一个字节,int占用四个字节(32位系统),int类型指针转为char*类型的指针,会丢掉三个字节的内存
    //pChar = static_cast<char*>(pInt);

    //double占用8字节, 而int占用四个字节,会多余四个未知字节,不可使用
    //pDouble = static_cast<double>(pInt);
    std::cout<<sizeof(double)<<std::endl;
    return 0;
}

- [*]static_cast不能做不同类型的指针之间的转换,这种指针之间的转换是极不安全的