C++之类型转换与编程建议

 1.类型转换算子(见代码 :02cast.cpp)

    C语言中:
      隐式类型转换:  小到大   char --> int
      显示类型转换(强制类型转换):  大到小    int -->  char
      如: char c = 'a';
         int i = (int)c;  //C语言中强制类型转换风格
    C++中:
    int i = (int)c;
    int i = int(c);//C++ 风格的强制类型转换
    int i = 10;
    char c = (char)i;
    char c = char(i);

    (1)静态类型转换

         目标类型 变量名 = static_cast<目标类型>(源类型变量名);
         如:  int* p;
            void* v = p;//int*  -> void*
            p = static_cast<int*>(v)
            v = static_cast<void*>(p)
    功能:
         在源类型和目标类型之间只要有一个方向可以做隐式类型转换,那么在两个方向上都可以做静态类型转换,
         反之如果在两个方向都不能做隐式类型转换,那么在两个方向上都不能做静态类型转换。

    (2)常量类型转换

          目标类型 变量名 = const_cast<目标类型>(源类型变量名)
         如:  const int* pi = NULL;
         int* pj = const_cast<int*>(pi)  
     功能:
          用于去除 指针/引用 上的常属性

    (3)重解释类型转换

          目标类型 变量名 = reinterpret_cast<目标类型>(源类型变量名)
         如:  int i;  <==> 4 个char  <==>  2个short
              int* pi;
              double* pd = reinterpret_cast<double>(pi);
     功能:
               主要用于任何类型的指针 或 引用之间的转换,甚至可以进行指针和整型之间的转换

    (4)动态类型转换

          目标类型 变量名 = dynamic_cast<目标类型>(源类型变量名);
     功能:
         主要用于具有多态特性的父子类 指针/引用 之间的转换 (以后讲到)

   2.C++之父给C程序员编程的建议

         (1)尽量少使用宏,而代之以const 、enum、inline以及template(模版) 代替

    (2)变量随使用随声明

    (3)尽量少使用malloc/free 等函数,而使用 new/delete 去代替

    (4)避免使用void*、 指针算数(指针+数)、联合以及强制类型转换

    (5)尽量少使用C风格字符串,用string类型代替

    char arr[]  char* pstr; "hello"
    string str = "hello";
    string str("hello");
    string str2 = str;
    string str3;
    str3 += str;
    支持下标访问
    C风格字符串和string类型的转换:
    char arr[20];
    string str;
    str = arr;//直接转换
    strcpy(arr,str.c_str());//c_str()函数用于将string 类型转换为C风格字符串

    (6)理解面向对象的编程思想

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值