C++中的强制类型转换

    C++ 创始人 Stroustrop 认为 C 语言的类型转换太过松散。所以在 C++ 中添加了 4 个类型转换操作符。使得转换过程更加的规范 。增加了 四个关键字。依次为 : static_cast 、 dynamic_cast 、reinterpret_case 、const_cast

    static_cast

        

可以将值从一种数据类型转换到另一种数据类型

例:

 int i;

Char c = static_cast<char> (i);

 *当 static_cast<type> (value)type value所属类型可以隐式转换时(单向即可),本转换才是合法的。

其他的 3个,如果type放的不是 指针 或者引用的话,就会报错(VS)。


    dynamic_cast:


将基类类型的指针或者引用安全的转换为派生类类型的指针或者引用    vstype必须为动态的)

运行时类型识别:RTTI

  有虚函数的情况   :运行时

  没有虚函数的情况: 编译时,静态(VS中编译就不过)

指针:

  如果转换失败 则返回 0 即空指针

引用:

  如果转换失败 则抛出 bad_cast 异常


    reinterpret_case


用于天生危险的类型转换。

例:

 structdat{short a; short b};

 long value = 0x05A224B118;

Dat *pd = reinterpret_case<dat *>(&value);

Cout<<pd->a<<endl;

通常这种转换是适用于实现的底层编程技术。比如上例,在不同的大小端的环境中 运行结果是不同的。

注:它不支持所有的类型转换 ,比如:

  1不允许删除count

  2.不能将函数指针和数据指针之间转换

    3.可以将指针类型转换成int但是不能转成更小的char或者浮点型。


   const_cast:

由于编程中可能无意间同时改变类型和常量特征,因此使用const_cast更安全。

可以修改指向一个值的指针,但修改const值的结果是不确定的(C++标准指出这种行为是不确定的)

   也就是修改 有可能成功,也有可能不成功。

 intia = 10;

Const int ca = 100;

Void change(const int * pt ) {

  int * pi = null;

  pi = const_cast<int *>(pt);

    *pi = 0;// const_cast

void main () {

Change(&ia);//0

Change(&ca);// 100}


//-------------------------------------------------------------
个人的理解,欢迎指正交流。如有转载,请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值