zoukankan      html  css  js  c++  java
  • C++类型转换

      C++有4种类型转换,分别为:const_cast,static_cast,dynamic_cast,reinterpret_cast;下面结合代码分别介绍4种类型转换。

    const_cast:

      去掉类型的const属性,将const变量转为非const变量

     1 const int a;
     2 
     3 //直接修改const类型变量的值,编译错误
     4 //a = 10; 
     5 
     6 //去除const属性,并转换为int&类型
     7 int &b = const_cast<int&>(a);
     8 
     9 //可以对其值进行修改
    10 b = 10;

    static_cast:

    类似于C语言的强制类型转换,用于各种隐式转换。

      父类指针子类指针之间的转换:子类指针转换为父类指针(向上转换安全),父类指针转换为子类指针(向下转换不安全);基本数据类型转换;任何类型转换成void类型非const类型转换为const类型,但是不能去掉类型的const属性。

     1 B* b = new B();
     2 //子类(B)指针转换为父类(A)指针,安全
     3 A* a = static_cast<A*>(b);
     4 
     5 int n = 10;
     6 //基本数据类型转换
     7 double d = static_cast<double>(n);     
     8 
     9 int *pn = &n;
    10 //任意数据类型转换为void类型
    11 void *p = static_cast<void*>(pn);
    12 
    13 int a=10;
    14 //非const类型转换为const类型
    15 const int b=static_cast<const int>(a);

    dynamic_cast:

    用于动态类型转换,运行时检查类型安全(转换失败返回NULL)。

      父类指针子类指针之间的转换,向上向下转换均为安全的且只能用于含有虚函数的类。

     1 //A类为父类,B类为子类,且含有虚函数
     2 
     3 B* pb = new B();
     4 //子类(B)指针转换为父类(A)指针,静态类型转换,不进行安全检查
     5 A* ps1 = static_cast<A*>(pb);  
     6 //子类(B)指针转换为父类(A)指针,动态类型转换,进行安全检查
     7 A* ps2 = dynamic_cast<A*>(pb); 
     8 
     9 A* pb2 = new A();
    10 //父类(A)指针转换为子类(B)指针,静态类型转换,危险、
    11 //当访问子类有而父类没有的成员时出错
    12 B* ps21 = static_cast<B*>(pb2);
    13 //父类(A)指针转换为子类(B)指针,动态类型转换,安全,结果为NULL
    14 B* ps22 = dynamic_cast<B*>(pb2);

    reinterpret_cast:

    几乎什么都可以转(如int类型转换为指针类型),尽量少用。

    相关链接

    C++智能指针 https://www.cnblogs.com/yongjin-hou/p/14394429.html

  • 相关阅读:
    Windows 7 x64 (英文操作系统)安装SQLServer 2005版本相关解决方法
    vs2008打开vs2010所做的项目的方法
    sqlserver2008 创建自动备份任务(图文教程)
    js返回上一页,自动刷新自身、父页面语句的实现
    有效的更改IE、Firefox、Chrome浏览器缓存位置的方法
    oo第二次总结
    OO第一次博客总结
    Ansible常用命令整理
    APM全链路监控日志收集篇
    TCP 和 UDP 的区别还有一个UTP一
  • 原文地址:https://www.cnblogs.com/yongjin-hou/p/14391180.html
Copyright © 2011-2022 走看看