C++的类型转换

慈云数据 6个月前 (05-13) 技术支持 38 0

目录

一.   C语言中的类型转换

1.1   隐式类型转换

1.2   强制类型转换

1.3   缺点

二.    C++中的类型转换

2.1   内置类型转换为自定义类型

2.2   自定义类型转换为内置类型

2.3   自定义类型转换为自定义类型

三.   C++强制类型转换

3.1   static_cast

3.2   reinterpret_cast

3.3   const_cast

3.4   dynamic_cast

四.   谨慎使用强制转换


前言:  

今天我们来讲解C和C++的类型转换,内容炒鸡干,准备好水,一起来看看吧!

一.   C语言中的类型转换

在C语言中,如果等号两边的类型不一样,或者形参和实参的类型不匹配,或者函数返回值与接收的变量类型不同,就会发生类型转换。C语言中存在两种类型转换:隐式类型转换和显示类型转换。

  • 隐式类型转换:编译器自动进行的,能转换就转,转换不了就会报错
  • 显示类型转换:用户自己定义的。

    1.1   隐式类型转换

    隐式类型转换包括整型与整型之间,整型与浮点型之间,bool与整型之间,bool与指针之间的转换等等。 

    int i = 1;
    //隐式类型转换
    //整型与整型之间
    char c = i;
    //整型与浮点型之间
    double d = i;
    //bool与整型之间
    bool b = i;
    // bool与指针之间
    int* p = &i;
    if (p)
    {
    	printf("1");
    }

    特别注意的是:有关联的类型才能相互转换。

    如下:

    int i = 1;
    int* p=&i;
    //无法转换,他们之间没有关联
    double dd = (double)p;

    是会报错的,因为double类型的变量与int*类型的指针之间并没有关联,所以类型转换会失效。

    1.2   强制类型转换

    一般发生在不同类型的指针转换或者指针与整型转换之间:

    int i = 1;
    int* p = &i;
    //显示的强制类型转换
    //整型与指针之间
    int address = (int)p;
    //不同类型指针之间
    double* pp=(double*)p;

    1.3   缺点

    • 转换的可视性比较差,所有的转换形式都是以一种相同形式书写,难以跟踪错误的转换。
    • 隐式类型转化有些情况下可能会出问题:比如数据精度丢失
    • 显式类型转换将所有情况混合在一起,代码不够清晰

       比如下面这段代码:

      //隐式类型转换
      void Insert(size_t pos, int x)
      {
      	//size_t end = _size;
      	int end = 10;
      	//比较的时候end会隐式类型转换成size_t,再比较
      	while (end >= pos)
      	{
      		cout 
微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon