c++ 类型转换

1、数据类型转换(static_cast)

//数据类型转换
printf("%d\n", static_cast<int>(10.2));

2、指针类型转换(reinterpret_cast)
//指针类型转换
  int *pint = new int(1);
  char *pch = reinterpret_cast<char *>(pint);

3、涉及到const的指针类型转换(const_cast)
  const int num[5] = { 1,2,3,4,5 };
  const int *p = num;
  int *pint = const_cast<int *>(p);

4、子类转化为父类(dynamic_cast)

class man
{
public:
    int name;
    //加上virtual关键字,可以使得父类用子类初始化后可以调用子类的函数
    virtual void run()
    {
        cout << "man is running" << endl;
    }
};

class son :public man
{
public:
    void run()
    {
        cout << "son is running" << endl;
    }
};

void main()
{
    /*man man1;
    son son1;
    man *p = &man1;
    p->run();
    p = &son1;
    p->run();*/
    man *pman = new man;
    son *pson = new son;
    //子类指针转换为父类指针,但是还是调用子类的函数
    man *pfu = dynamic_cast<man *>(pson);
    pfu->run();
    system("pause");
}

 

    volatile关键字
  表示该变量易变,每次在访问该关键字修饰的变量时都要读内存,不对其进行优化。
  mutable关键字
  类的常成员函数在语义上是不允许修改类的成员变量的,但是有时候可能根据代码的需要并不是这么绝对。那么就可以使用mutable声明一个类的成员变量,它告诉编译器类的常成员函数可以修改这个变量。
  explicit关键字
  修饰构造函数,通常用作 构造函数静止隐式转换。
  四种类型转换
  1. const_cast
  去掉类型的const或volatile属性。
    const int a=10;
    int &b=const_case<int&>(a);
 
  2. static_cast
  静态类型转换,用于类型间强制转换。用于:
  (1)基类和子类转换,子类指针转父类是安全的,父类转子类不安全。
  (2)基本数据类型转换。
  (3)空指针转换成目标类型指针。
  (4)转换为void类型
    int n=1;
    double  d=static_cast<double>(n);
    int *pn=&n;
    double *d=static_cast<double*>(&n);
    void *p = static_case<void*>(pn);
  
  3.dynamic_cast
  动态类型转换,运行时类型安全检查(转换失败返回NULL)
  (1)安全基类和子类转换,基类转子类会失败。
  (2)必须有虚函数。
  (3)相同基类不同子类间转换,结果为NULL。
 
   4.reinterpret_cast
  重新解释类型,没有进行二进制转换。
  一般用在函数指针类型之间转换。

 

原文链接: https://www.cnblogs.com/lovebay/p/11558472.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    c++ 类型转换

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/303025

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月15日 下午11:48
下一篇 2023年2月15日 下午11:52

相关推荐