C++四种强制类型转换

来源:互联网 发布:算命 知乎 编辑:程序博客网 时间:2024/05/17 08:26

1、概述

       去const属性用const_cast。

  基本类型转换用static_cast。

  多态类之间的类型转换用daynamic_cast。

  不同类型的指针类型转换用reinterpreter_cast。

2、详解加示例

     a> const_cast

     用法:const_cast<类型>(表达式)

     用途:删除const属性

     示例及结果:

     

int a=3;const int *b=&a;int *c=const_cast<int*>(b);*c=4;std::cout<<"value: "<<*c<<" "<<*b<<" "<<a<<std::endl;std::cout<<"address:"<<c<<" "<<b<<" "<<&a<<std::endl;

               
  

    b>static_cast

    用法:static_cast<类型>(表达式)

    用途:用于非多态类型转换,标准转换,代替C中通常的转换操作。

    示例及结果:

   

        int a=3;float f=166.7f;a=static_cast<int>(f);std::cout<<a<<std::endl;

    此时a值为166,不用关心转换后精度的损失

 

   c>dynamic_cast

   用法:dynamic_cast<类型>(表达式)

   用途:将一个指向派生类的基类指针或引用转换为派生类的指针或引用

   示例及结果:

   

#include <iostream>class A{public:A(){}~A(){}virtual void print(){std::cout<<"A::print"<<std::endl;}};class B : public A{public:B(){}~B(){}void print(){std::cout<<"B print"<<std::endl;}void test(){std::cout<<"test"<<std::endl;}};int main(){//dynamic_cast测试A *pA;B *pB,mB;pA=&mB;pB=dynamic_cast<B*>(pA);//pA->test();  //错误语句,test不是A的成员,不可访问pB->test();    //正确dynamic_cast<B*>(pA)->test(); //正确,已经转换为派生类指针return 0;}

          

     注意事项:

     dynamic_cast转换符只能用于指针或者引用,只能用于含有虚函数的类。该操作符在执行类型转换时首先将检查能否成功转换,所以在使用之前应使用if语句对其转换成功与否进行测试。

     d>reinterpret_cast操作符

     表达式:reinterpret_cast<类型>(表达式)

     用途:将一种类型转换为另一种不同的类型

  


0 0
原创粉丝点击