C++ 强制类型转换若干问题

C++四种强制类型转换的总结

       这个蛮难的,专业资料上的涉及的概念太多,看不懂。弄懂它需要时日。

C风格的类型转换

Type b=(TYPE)a;


C++的四种类型转换操作符

const_cast:去constness属性或volatinaleness属性。

static_cast:静态类型转换。如int转换成char。

dynamic_cast:动态类型转换。如子类和父类之间的多态类型转换。

reinterpret_cast:重新解释类型,但没有进行二进制的转换。

转换格式统一是

Type b=operator<Type>(a);    // operator 是上述四个操作符之一

1、const_cast

        基本没用过,看似简单,但是用法并不简单,CppReferecnce上的介绍我也基本看不懂。等以后有更多的使用经验后再补上。

2、static_cast

        编译器隐式执行的任何类型转换都可以由 static_cast 显式完成。显式地提供强制类型转换,可以关闭编译器的某些警告信息。比如,当我们显式地提供强制类型转换时,从一个较大的算术类型到一个较小类型的赋值,警告信息会被关闭。


        static_cast主要用在如下场合:

  • 基类和子类之间转换。其中子类指针转换成父类指针是安全的;但父类指针转换成子类指针是不安全的,基类和子类之间的动态类型转换建议用dynamic_cast。
  • 基本数据类型转换。enum, struct, int, char, float等。static_cast不能进行无关类型--如非基类和子类--指针之间的转换。
  • 把空指针转换成目标类型的空指针。
  • 把任何类型的表达式转换成void类型。

        更加专业的解释请参考CppReference上的介绍,全英文而且涉及的概念较多,很遗憾到目前我没看懂。

int n = 6;
double d = static_cast<double>(n);    // 基本类型转换
int *pn = &n;
double *pd = static_cast<double*>(&n);    // 无关类型指针转换,编译错误。error: invalid static_cast from type 'int*' to type 'double*'
void *p = static_cast<void*>(pn);    // 任意类型转换成void类型

3、dynamic_cast

        将父类指针转换为子类指针,其他的应用场景请参考CppReference上的介绍。蛮复杂的。        

4、reinterpret_cast

       请参考CppReference上的介绍


参考:http://blog.csdn.net/jinzhilong580231/article/details/6774985


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值