c++的四种类型转换

1.静态

    static_cast<目标类型>(源类型变量)

    编译器对 源类型 和 目标类型 做相容性检查(在源和目标之间存在至少一个方向可以做隐式类型转换(包括类型转换构造函数,类型转换运算符 函数),那么这两个类型就是相容类型)

    如果想要程序员显示的执行类型转换,则在类型转换构造函数前添加explicit关键字,如此编译器编译时如果存在隐式类型转换直接报错,必须显示的使用类型转换,即通过static_cast进行类型转换完成。

百度文库-C语言隐式类型转换规则

2.动态

   dynamic_cast<目标类型>(源类型变量)

    具有多态性的父子类型的指针或引用。

    注意:

    在类型转换构造函数中,如果想要改转换显示完成,需要在该类型转换构造函数中使用explicit修饰

3.去常

    const_cast<目标类型>(源类型变量)

    去掉或添加指针类型的常属性,通常用于去常,因为加常属性可以隐式完成,如非常变量可以传递给函数的常形参。

    编译器的常量优化:

 

   const int a = 100;


    int& x = const_cast<int&>(a);

    x = 200;

    cout << a << ' ' << x << endl;// 100 200

    编译器的常量优化策略在编译阶段直接将常量的值直接编译到代码中,省去从内存中取值压栈出栈过程。

    即实际编译成的二进制码其实是:

   

 cout << 100 << ' ' << x << endl; //a的值是在编译阶段就确定了,x的值是在运行时确定的 。

4.重解释

 reinterpret_cast<目标类型>(源类型变量)

       转换任意类型的指针或者引用。

  • 同为指针或者同为引用;
  • 任意类型的指针和整型之间;    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值