c++ 中定义了一些类型转换函数,如:static_cast,dynamic_cast等。
一、 static_cast 用在如下四种情况。
1.类的层次结构中,基类与派生类之间指针与引用的转换
1.) 派生类 =>基类 是安全的,应为派生类包含基类部分。
2.) 基类 =>派生类,是不安全的,需要程序员保证。
2.用于基本数据类型之间的转换,如 int转为char, int 转为enum,这种转换也需要程序员来保证。
3.把空指针 =》其他类型空指针
注意:static_cast不能转换掉expression的const、volatile、或者__unaligned属性
二、dynamic_cast
1.类的层次结构中,基类与派生类之间指针与引用的转换
1.) 派生类 =>基类 是安全的,应为派生类包含基类部分。
2.) 基类 =>派生类,也是安全的
这种用法与static_cast极其类似,只是dynamic_cast会进行类型检查,若该对象不为派生类型,
则返回NULL
2.类的层次结构中,兄弟类型之间,主要用在多继承中。
如 D 继承B,B1,可以实现B类型转换为B1类型。若不是目标类型,返回为NULL。
B b=new D;
dynamic_cast<B1>(b) // ok
B b =new B;
dynamic_cast<B1>(b) // NULL
三、static_cast 与 dynamic_cast 差别。
1.static_cast 在类层次结构中转换,不能用在兄弟之间,编译报错。
B b=new D;
dynamic_cast<B1>(b) // compile error
2.static_cast 不安全,对于类型有问题是,当前可以运行,具有安全隐患。
3.dynamic_cast 只能用在 类(基类)中有virtual函数的类中,若没有,编译报错。
这一点说明可以大致简单理解,编译器的设计是 ,没有虚类的类中,没有必要cast.
gcc error source type is not polymorphic
4.dynamic_cast 只能用在类层次结构中转换
相关推荐
例说 const_cast,reinterpret_cast,static_cast,dynamic_cast代码.rar
讨论 dynamic_cast,static_cast<> 和 reinterpret_cast<> and Runtime Type Information
标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast
标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast
本文用示例讲解了dynamic_cast、static_cast子类与基类之间转换功能的使用方法
主要介绍了C++中的类型转换static_cast、dynamic_cast、const_cast和reinterpret_cast总结,需要的朋友可以参考下
类型强制转换的区别 static_cast dynamic_cast 的区别
dynamic_cast_benchmark 三种不同的dynamic_cast实现的性能比较请参阅我的博客文章: 汇编: git submodule initgit submodule updatemake./dynamic_cast_benchmark 目标编译器:clang版本13.0.0 以下是dynamic_cast...
1.static_cast对类的指针只能转换有继承关系的类。对普通的指针来说只能在void*和其他指针之间转换。它还可转换简单的类型,比如int到char等。不能提供数字到指针的转换。不能提供不同类型指针之间的转换比如int*到...
static_cast和dynamic_cast是C++的类型转换操作符。编译器隐式执行的任何类型转换都可以由static_cast显式完成,即父类和子类之间也可以利用static_cast进行转换。而dynamic_cast只能用于类之间的转换。那么dynamic_...
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).在表达式外边加括号,由编译器来决定怎么改变。...
什么是static_cast,dynamic_cast以及reinterpret_cast?区别是什么?为什么要注意? A:转换的含义是通过改变一个变量的类型为别的类型从而改变该变量的表示方式。为了类型转换一个简单对象为另一个对象你会使用传统...
为了⽀持这样的⽤法,shared_ptr提供了类似的转型函数 static_pointer_cast()、const_pointer_cast()、dynamic_pointer_cast(),它们与标准的转型操作符static_cast()、const_cast()和dynamic_cast()类似,但返回的...