C++学习之——数据类型转换强制转换

在C++中,也提供了数据类型的强制类型转换,但方式与C不同,C中我们很容易把一种数据类型转换成另外一种数据类型,但在C++中,我们不提倡使用使用强制类型转换。C++中数据类型强制转换有四种转换的运算符,下面我来初步的介绍一下:


一  .   static_cast(cexpr)         (T代表你将转换成的数据类型,cexpr是将要类型转换的变量名)

用途:用于所有普通基本类型转换,但不能用于基本类型的指针间的类型转换,可以用于继承关系对象之间的转换和类指针间的转换。

程序:
#include
using namespace std;
class A
{
 public:
  int m_a;
};
class B : public A
{
 public:
  int m_b;
};
int main()
{
 int x=1;
 char y='b';
 x=static_cast(y);//普通类型之间转换。
 int *px=&x;
 char *py=&y;
// px=static_cast(py);   //不能在普通指针之间进行转换。
 
 A a;
 B b;
 a=static_cast(b);//可以在继承关系的类之间进行转换
 
 A *pa=&a;
 B *pb=&b;
 pa=static_cast
(pb);//可以在有继承关系的类指针之间进行转换
 pb=static_cast(pa);
 return 0;
 }
 
 注意:static_cast是编译期进行转换的,无法在运行时检测类型。
 
 
 二 .   reinterpret_cast(expr)

用途:(1).用于指针类型之间的强制类型转换。
          (2).用于整数和指针类型之间的强制类型转换。
 
 #include
 
 using namespace std;
 
 int main()
 {
  int a=2;
  char b='c';
  int *pa=&a;
  char *pb=&b;
  pb=reinterpret_cast(pa);//用与普通指针类型转换。
  return 0;
 }
 
 
 
 
 
三  .  const_cast(rxpr)

用途: 剥离一个对象的const属性,即转换后可以对常量进行修改。

 #include
 
 using namespace std;
 
 int main()
 {
  const int a=1;             //相当于宏定义,后面的打印 a 都是1.
  int &c=const_cast(a);
  c=2;
  cout<  
  const int &b=3;
  int &d=const_cast(b);   //相当于d是b的一个别名引用,所有改变d就改变了b。
  d=4;
  cout<  return 0;
  }
 
 
 
 
 四   .  dynamic_cast(expr)

用途:
    (1)主要用于类层次间的转换,还可以用于类之间的交叉转换
    (2)本运算符具有类型检查功能,比static_cast更安全。

你可能感兴趣的:(C++学习之——数据类型转换强制转换)