C++|项目开发—强制类型转换回顾

Posted 城子特讯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++|项目开发—强制类型转换回顾相关的知识,希望对你有一定的参考价值。

强制类型转换        

C++四种强制类型转换符:static_cast, reinterpret_cast, const_cast, dynamic_cast。

这四种强制类型转换的使用场合:

static_cast 

1、可用于强制隐型转换,如int转换为double、non-const对象转const对象。

2、可用于如void*指针转型为有类型的指针,父类指针转换为派生类指针,

3、注:它不能将一个const转换为non-const。

int num = 666888;  double num_static = static_cast<double>(n);   int *ptr = &num;  double *num = static_cast<double *>(&n)     //任意类型转换成void类型  void *p = static_cast<void *>(ptr); 

dynamic_cast 

1、一般用于执行"安全向下转型",也就是动态类型转换。如子类和父类之间的多态类型转换。主要用途:将基类的指针或引用安全地转换成派生类的指针或引用。

2、父类类型的指针变量不可向下调用派生类各个的成员(包含虚函数)。

3、注:子类指针转换成父类指针是安全的;但父类指针转换成子类指针是不安全的。

class Base   public:  int m_Num;  virtual void func();  ;  class Derived: public Base   public:    char *m_array[100];  void function();  ;  Base* ptrb = new Derived();  Derived *ptrd = dynamic_cast<Derived *>(ptrb);    Base* pb = new Base();  Derived *pd = static_cast<DerivedClass *>(pb);

reinterpret_cast 

1、用于进行各种不同类型的指针之间、不同类型的引用之间以及指针和能容纳指针的整数类型之间的转换。

reinterpret_cast<type_id>(expression)int num = 0x00636261;//用16进制表示32位int,0x61是字符'a'的ASCII码  int * pnum = &num;  char * pstr = reinterpret_cast<char *>(pnum);  cout<<"pnum指针的值: "<<pnum<<endl;  cout<<"pstr指针的值: "<<static_cast<void *>(pstr)<<endl;//直接输出pstr会输出其指向的字符串,这里的类型转换是为了保证输出pstr的值  cout<<"pnum指向的内容: "<<hex<<*pnum<<endl;  cout<<"pstr指向的内容: "<<pstr<<endl;  return 0;

此例子参考https://zhuanlan.zhihu.com/p/33040213

const_cast 

一般用于强制取消对象的常量性,就是去掉const属性。

以上是关于C++|项目开发—强制类型转换回顾的主要内容,如果未能解决你的问题,请参考以下文章

C++中的数据类型强制转换

c++的四种强制类型转换

在c语言中数据类型转换主要有哪几种方式

c++类型转换

C++的类型转换

C++的类型转换