C++之强制类型转换

一、定义

    这里要了解的是c++中的类型转换大体上和c语言中类型转换是相同的,但是c++中也有自己的一套转换

    方法,它们分别是1、static_cast 2、const_cast 3、dynamic_cast 4 、reinterpret_cast 

二、使用

    1、static_cast转换操作符

        最常用的类型转换符,将常见的类型进行互相转换,例如

    int main()
  {
	int a =	2 ;
	float b ;
	b = static_cast<float>(a);//进行类型转换
	cout<<b<<endl;
  }

2、const_cast转换操作符

    用于去除const属性,把const类型的指针变为非const类型的指针

int main()
{
	const int a = 2 ;
	const int* p1 = &a;
	int *p2 = const_cast<int*>(p1);//const指针到非const指针的转换
	cout<<*p2<<endl;
}

  

3、dynamic_cast转换操作符

    该操作符用于运行时检查该转换是否类型安全,但只在多态类型时合法,即该类至少具有一个虚拟方法。

    dynamic_cast主要用于类层次间上行和下行的转换,还可以用于类之间的交叉转换。在类层次进行上行

    转换时,dynamic_cast和static_cast的效果是一样的;在进行下行转换时,dynamic_cast具有类型检查

    的功能,比static_cast安全。主要作用是将父类指针转换子类指针。

class A
{
	public :
		int a;
		virtual void getA(int& b)
		{
			a = b;
			cout<<a<<endl;
		}
};
class a :public A
{
	public :
		int b;
};
int main()
{
	int b =10;
	a *p = dynamic_cast<a*>(new a);//p指向的是子类时,所有操作都是合法的
	//a *p = dynamic_cast<a*>(new A);//p指向父类时,p为空从某种意义来说是非常安全的,但不会报错
	p->getA(b);
} 

    

    4、reinterpret_cast转换操作符

        它能用于两个毫不相关的类之间的转换,在没了解两个类的内存节构的情况下可能会导致诸如

        内存膨胀或者截断的问题因此它是不安全的。

        

class A
{
	public :
		int a;
};
class B
{
	public :
		int b;
};
int main()
{
	int a = 1;
	A *p=reinterpret_cast<A*>(new B);//不安全转换
} 

欢迎各位指出不足之处




猜你喜欢

转载自blog.csdn.net/qq_41003024/article/details/80229446