c语言的cast()怎么用,新手求教

Python024

c语言的cast()怎么用,新手求教,第1张

您好,

对于具有标准定义转换的简单类型而言工作的很好。然而,这样的转换符也能不分皂白的应用于类(class)和类的指针。ANSI-C++标准定义了四个新的转换符:'reinterpret_cast', 'static_cast', 'dynamic_cast' 和 'const_cast',目的在于控制类(class)之间的类型转换。

C++的四种cast操作符的区别和用法:

1 reinterpret_cast

'reinterpret_cast'转换一个指针为其它类型的指针。它也允许从一个指针转换为整数类型。反之亦然。(译注:是指针具体的地址值作为整数值?)

这个操作符能够在非相关的类型之间转换。操作结果只是简单的从一个指针到别的指针的值的二进制拷贝。在类型之间指向的内容不做任何类型的检查和转换。

如果情况是从一个指针到整型的拷贝,内容的解释是系统相关的,所以任何的实现都不是方便的。一个转换到足够大的整型能够包含它的指针是能够转换回有效的指针的。

2 static_cast

'static_cast'允许执行任意的隐式转换和相反转换动作。(即使它是不允许隐式的)

应用到类的指针上,意思是说它允许子类类型的指针转换为父类类型的指针(这是一个有效的隐式转换),同时,也能够执行相反动作:转换父类为它的子类。

3 dynamic_cast

'dynamic_cast'只用于对象的指针和引用。当用于多态类型时,它允许任意的隐式类型转换以及相反过程。不过,与static_cast不同,在后一种情况里(注:即隐式转换的相反过程),dynamic_cast会检查操作是否有效。也就是说,它会检查转换是否会返回一个被请求的有效的完整对象。

检测在运行时进行。如果被转换的指针不是一个被请求的有效完整的对象指针,返回值为NULL.

4 const_cast

这个转换类型操纵传递对象的const属性,或者是设置或者是移除:

其它三种操作符是不能修改一个对象的常量性的。

注意:

'const_cast'也能改变一个类型的volatile qualifier.

——如有帮助,请采纳一下。

强制类型转换

c++的这个cast 是借用的冶金中铸造注模的概念,把液态的金属倒入成型的模范这个过程叫cast。编程中把一段数据装成某个数据类型,让数据具有某个类型的过程叫做cast。

比如让4个字节变成一个int类型,把int变成4个char这种过程。

基本上和“类型转换”同义,不过cast在c++语言中是从对象封装的视角看这个动作。

所以有动态cast,静态cast等多种cast。