`

const_cast,reinterpret_cast,static_cast,dynamic_cast

    博客分类:
  • C++
 
阅读更多
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

    本资源“例说 const_cast,reinterpret_cast,static_cast,dynamic_cast代码.rar”聚焦于四种主要的C++类型转换:const_cast、reinterpret_cast、static_cast和dynamic_cast。这四个关键字都是为了安全和高效地在...

    标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast

    ### 标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast 在C++编程语言中,为了提高程序的可读性和安全性,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总结

    本文将详细介绍四种主要的显式类型转换:`static_cast`、`dynamic_cast`、`const_cast`和`reinterpret_cast`。 首先,`static_cast`主要用于非多态类型的转换,它不提供运行时的类型检查。例如,当进行基类与子类...

    static_cast,dynamic_cast,reinterpret_cast,const_cast的区别及用法详解

    1.static_cast对类的指针只能转换有继承关系的类。对普通的指针来说只能在void*和其他指针之间转换。它还可转换简单的类型,比如int到char等。不能提供数字到指针的转换。不能提供不同类型指针之间的转换比如int*到...

    C++中4种强制类型转换的区别总结

    使用标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast。 const_cast,字面上理解就是去const属性。 static_cast,命名上理解是静态类型转换。如int转换成char。 dynamic_cast,...

    static_cast,dynamic_cast,reinterpret_cast和const_cast的区别详解

    C-style cast举例: int i; double d; i = (int) d;上面的代码就是本来为double类型的d,通过(int)d将其转换成整形值,并将该值赋给整形变量i (注意d本身的值并没有发生改变)。这就是典型的c-style类型转换。下面...

    浅谈C++中强制类型转换函数

    C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用,即const_cast、static_cast、dynamic_cast和reinterpret_cast。 const_cast是用于去掉类型的const或volatile属性的操作符。它常用于指针或引用,...

    类型转换操作符:static_cast,dynamic_cast,const_cast,reinterpret_cast.

    呵呵,今天来好好看看着几个转换操作符的用法。以前老是看着眼熟,但是用着手生。今天决定搞定这些个东西。在C语言中类型转换有几种方式:1.(expression).在表达式外边加括号,由编译器来决定怎么改变。...

    C++中的类型转换

    本文将详细介绍C++中的四种显式类型转换:static_cast、dynamic_cast、const_cast和reinterpret_cast。 1. static_cast static_cast是一种静态类型转换,用于非多态类型之间的转换,不提供运行时的检查来确保转换...

    C++显式类型转换[借鉴].pdf

    C++ 提供了四个显式的数据类型转换函数:reinterpret_cast、const_cast、static_cast 和 dynamic_cast。这些转换函数可以在编译期间或运行期间实现数据类型的转换。 1.reinterpret_cast reinterpret_cast 是一种低...

    四种强制类型转换分析文档1

    本文将详细解析四种强制类型转换:const_cast、static_cast、dynamic_cast以及reinterpret_cast。 首先,`const_cast`主要用于改变对象的const或volatile属性。它的原型是`const_cast(expression)`。它允许你去除...

    C++类型转换(英文讲解,参考实例)

    本文将详细介绍C++中的四种类型转换操作符:`static_cast`、`const_cast`、`dynamic_cast`和`reinterpret_cast`,以及如何使用这些操作符进行类型转换。 #### 二、C 风格类型转换与C++风格类型转换 ##### 2.1 C ...

    C++ 中的强制类型转换

    C++提供了四种显示的强制类型转换操作符,分别是`const_cast`、`static_cast`、`dynamic_cast`和`reinterpret_cast`。 1. `const_cast`: `const_cast`主要用于移除对象的`const`或`volatile`属性,允许程序员修改...

    C++类型转换 涉及static-cast,reinterpret-cast,dynamic-cast,const-Cast

    C++类型转换 涉及static-cast,reinterpret-cast,dynamic-cast,const-Cast

    C++4种强制类型转换

    C++提供了四种标准的强制类型转换运算符,分别是`static_cast`、`dynamic_cast`、`reinterpret_cast`和`const_cast`。这些运算符在不同的情景下有不同的用途和限制,下面我们逐一详细探讨。 1. `static_cast` `...

    c++四种强制类型装换

    C++提供了一组丰富的工具来处理不同类型的数据转换,其中四种强制类型转换符包括:`static_cast`、`dynamic_cast`、`reinterpret_cast` 和 `const_cast`。这些转换符各有特点,在不同的场景下发挥着重要作用。 ####...

Global site tag (gtag.js) - Google Analytics