c++类型转换

C语言中的类型转换

C语言和C++都是强类型语言,如果赋值运算符左右两侧变量的类型不同,或形参与实参的类型不匹配,或返回值类型与接收返回值的变量类型不一致,那么就需要进行类型转换。

C语言中有两种形式的类型转换,分别是隐式类型转换和显式类型转换:

  • 隐式类型转换:编译器在编译阶段自动进行,能转就转,不能转就编译失败。
  • 显式类型转换:需要用户自己处理,以(指定类型)变量的方式进行类型转换。

 

int main()
{
    //隐式类型转换
    int i = 1;
    double d = i;
    cout << i << endl;
    cout << d << endl;

    //显式类型转换
    int* p = &i;
    int address = (int)p;
    cout << p << endl;
    cout << address << endl;
    return 0;
}

 

为什么C++需要四种类型转换

C风格的转换格式虽然很简单,但也有很多缺点:

隐式类型转换在某些情况下可能会出问题,比如数据精度丢失。
显式类型转换将所有情况混合在一起,转换的可视性比较差。
因此C++为了加强类型转换的可视性,引入了四种命名的强制类型转换操作符,分别是static_cast、reinterpret_cast、const_cast和dynamic_cast。

 

C++强制类型转换

 

static_cast

static_cast用于相近类型之间的转换,编译器隐式执行的任何类型转换都可用static_cast,但它不能用于两个不相关类型之间转换。比如:

 

int main()
{
    double d = 12.34;
    int a = static_cast<int>(d);
    cout << a << endl;

    int* p = &a;
    // int address = static_cast<int>(p); //error
    return 0;
    }

原文链接:https://blog.csdn.net/chenlong_cxy/article/details/127144522

posted @ 2023-05-30 10:14  小景生生  阅读(36)  评论(0编辑  收藏  举报