C++|项目开发—强制类型转换回顾
Posted Charles梦想家
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 = #
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 = #
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++|项目开发—强制类型转换回顾的主要内容,如果未能解决你的问题,请参考以下文章