法律网站建设,玉田住房和建设局网站,建设网站要备案吗,百度推广费reinterpret_cast用法#xff1a;reinpreter_casttype-id (expression)type-id必须是一个指针、引用、算术类型、函数指针或者成员指针。它可以把一个指针转换成一个整数#xff0c;也可以把一个整数转换成一个指针。这个操作符能够在非相关的类型之间转换。操作结果…reinterpret_cast用法reinpreter_casttype-id (expression)type-id必须是一个指针、引用、算术类型、函数指针或者成员指针。它可以把一个指针转换成一个整数也可以把一个整数转换成一个指针。这个操作符能够在非相关的类型之间转换。操作结果只是简单的从一个指针到别的指针的值的二进制拷贝。在类型之间指向的内容不做任何类型的检查和转换。reinpreter_cast是特意用于底层的强制转型导致实现依赖就是说不可移植的结果。int n9;
// reinterpret_cast 仅仅是复制 n 的比特位到 d因此d 包含无用值。
double dreinterpret_castdouble (n);2. const_cast用法const_casttype_id (expression)用于修改类型的const或volatile属性。除了const 或volatile修饰之外type_id和expression的类型是一样的一般用于强制消除对象的常量性。它是唯一能做到这一点的 C 风格的强制转型而C不提供消除const的机制已验证。常量指针被转化成非常量指针并且仍然指向原来的对象常量引用被转换成非常量引用并且仍然指向原来的对象常量对象被转换成非常量对象。3. static_cast用法static_cast type-id ( expression )该运算符把expression转换为type-id类型但没有运行时类型检查来保证转换的安全性。它允许执行任意的隐式转换和相反转换动作。主要有如下几种用法1用于基本数据类型之间的转换如把int转换成charnon-const 对象转型为 const 对象这里相反方向不可以C只有const_cast可以。2把空指针转换成目标类型的指针。之前的做法是用强制转换(type-id*)3把任何类型的表达式转换成void类型。4应用到类的指针上它允许子类类型的指针转换为父类类型的指针upercasting这是一个有效的隐式转换也能够执行相反动作即转换父类为它的子类downcasting这种转换的安全性需要开发人员来保证主要是在非上下转型中。class Base {};
class Derived : public Base {};
Base *a new Base;
Derived *b NULL;
b static_castDerived *(a); //可以通过编译但存在安全隐患(如访问//Derived的成员)注意1static_cast不能转换掉expression的const、volitale、或者__unaligned属性。2在非基本类型或上下转型中被转换的父类需要检查是否与目的类型相一致否则如果在两个完全不相干的类之间进行转换将会导致编译出错。4. dynamic_cast只用于对象的指针和引用主要用于执行“安全的向下转型”也就是说要确定一个对象是否是一个继承体系中的一个特定类型。它是唯一不能用旧风格语法执行的强制转型也是唯一可能有重大运行时代价的强制转型。当用于多态类型时包含虚函数它允许任意的隐式类型转换以及相反过程。不过与static_cast不同在后一种情况里即隐式转换的相反过程dynamic_cast根据RTTI信息检查操作是否有效。即在转换时dynamic_cast会检查转换是否能返回一个被请求的有效的完整对象。这种检查不是语法上的而是真实情况的检查。检测在运行时进行如果被转换的指针不是一个被请求的有效完整的对象指针返回值为NULL。