static_cast:用于非多态类型的转换。
dynamic_cast:用于多态类型的转换。
const_cast:用来消除const, volatile, __unaligned属性的转换。
reinterpret_cast:用于空间的重新解释。
1、C++中的static_cast执行非多态的转换,用于代替C中通常的转换操作。因此,被做为隐式类型转换使用。比如:
int i;
float f = 166.7f;
i = static_cast<int>(f);
此时结果,i的值为166。
2、C++中的reinterpret_cast主要是将数据从一种类型的转换为另一种类型。所谓“通常为操作数的位模式提供较低层的重新解释”也就是说将数据以二进制存在形式的重新解释。比如:
int i;
char *p = "This is a example.";
i = reinterpret_cast<int>(p);
此时的结果输出为:i: 4229212
此时结果,i与p的值是完全相同的。reinterpret_cast的作用是说将指针p的值以二进制(位模式)的方式被解释为整型,并赋给i,一个明显的现象是在转换前后没有数位损失。
3.cont_cast
char *i;
const char *p = "This is a example.";
//i=p;//这里将出错
i = const_cast<char*>(p);
qDebug()<<"i:"<<i;
输出;i: This is a example.
4.dynamic_cast
2)dynamic_cast<T*>(a)
完成类层次结构中的提升。T必须是一个指针、引用或无类型的指针。a必须是决定一个指针或引用的表达式。
表达式dynamic_cast<T*>(a) 将a值转换为类型为T的对象指针。如果类型T不是a的某个基类型,该操作将返回一个空指针。
例子:
class A { ... };
class B { ... };
void f()
{
A* pa = new A;
B* pb = new B;
void* pv = dynamic_cast<A*>(pa);
// pv 现在指向了一个类型为A的对象
...
pv = dynamic_cast<B*>(pb);
// pv 现在指向了一个类型为B的对象
}
class B{};
class C : public B {};
class D : public C {};
void main()
{
D* pd = new D;
C* pc = dynamic_cast <C*> (pd);
B* pb = dynamic_cast <B*> (pd);
//C* pc = pd;
//B* pb = pd;
void *p=dynamic_cast <C*> (pd);
//void *p=pd;
}
dynamic_cast是运行时检查的,可以进行upcast和downcast。当然主要作用是downcast,即基类指针/引用到派生类指针/引用的转换。如果源和目标类型没有继承/被继承关系,编译器会报错;否则必须在代码里判断返回值是否为NULL来确认转换是否成功。
分享到:
相关推荐
例说 const_cast,reinterpret_cast,static_cast,dynamic_cast代码.rar
标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast
标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast
主要介绍了C++中的类型转换static_cast、dynamic_cast、const_cast和reinterpret_cast总结,需要的朋友可以参考下
1.static_cast对类的指针只能转换有继承关系的类。对普通的指针来说只能在void*和其他指针之间转换。它还可转换简单的类型,比如int到char等。不能提供数字到指针的转换。不能提供不同类型指针之间的转换比如int*到...
C-style cast举例: int i; double d; i = (int) d;上面的代码就是本来为double类型的d,通过(int)d将其转换成整形值,并将该值赋给整形变量i (注意d本身的值并没有发生改变)。这就是典型的c-style类型转换。下面...
使用标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast。 const_cast,字面上理解就是去const属性。 static_cast,命名上理解是静态类型转换。如int转换成char。 dynamic_cast,...
呵呵,今天来好好看看着几个转换操作符的用法。以前老是看着眼熟,但是用着手生。今天决定搞定这些个东西。在C语言中类型转换有几种方式:1.(expression).在表达式外边加括号,由编译器来决定怎么改变。...
本文详细介绍了C++中的四个用与强制类型转换的运算符:用来修改类型的const 或volatile 属性的const_cast,用来修改操作数类型的reinterpret_cast,static_cast,dynamic_cast
xxx_cast是一个统称,它指的是static_cast(静态转换),const_cast(常量转换),reinterpert_cast(重解释转换),dynamic_cast(动态转换)。本次我们就了解一下他的用途及其转换方式。 1.static_cast(静态转换) ...
C++中的类型转换static_cast、dynamic_cast、const_cast和reinterpret_cast
什么是static_cast,dynamic_cast以及reinterpret_cast?区别是什么?为什么要注意? A:转换的含义是通过改变一个变量的类型为别的类型从而改变该变量的表示方式。为了类型转换一个简单对象为另一个对象你会使用传统...
C++四中常用强制类型转化, :static_cast、dynamic_cast、reinterpret_cast、和const_cast
.背景知识/名词解释: C++: ? static ? const ? volatile ? mutable ? namespace ? template ? explicit ? const_cast ? static_cast ? dynamic_cast ? reinterpret_cast
C++ 中的强制类型转换,显示转换也成为强制类型转换(cast),包括以下列名字命名的强制类型转换操作符:static_cast、dynamic_cast、const_cast、reinterpret_cast。
C++更加安全,增加了const常量、引用、四类cast转换(static_cast、dynamic_cast、const_cast、reinterpret_cast)、智能指针、try—catch等等; C++可复用性高,C++引入了模板的概念,后面在此基础上,实现了方便...
原来我总结过c++的一些类型转换函数:static_cast,dynamic_cast,const_cast, reinterpret_cast其中各有各的用处和弊端。boost的Conversion库分别实现了四个类型转换函数:polymorphic_case, polymorphic_downcast,...