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”聚焦于四种主要的C++类型转换:const_cast、reinterpret_cast、static_cast和dynamic_cast。这四个关键字都是为了安全和高效地在...
"dynamic_cast, static_cast 和 reinterpret_cast" 在 C++ 编程中,类型转换是一个非常重要的概念。我们经常需要将一个类型的对象转换为另一个类型,以满足不同的需求。但是,类型转换也可能会引发一些错误和问题。...
### 类型强制转换的区别:`static_cast`与`dynamic_cast`的不同 在C++编程语言中,类型转换是实现代码灵活性的重要手段之一。C++提供了多种类型转换的方式,包括`static_cast`、`dynamic_cast`等,每种方式都有其...
### 标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast 在C++编程语言中,为了提高程序的可读性和安全性,C++标准库提供了多种类型的转换机制。其中,最常用的四种类型转换符包括:`...
`dynamic_cast`和`static_cast`是两种不同的类型转换操作符,它们各自适用于不同的场景。本文将通过示例详细解释它们的使用方法,特别是它们在子类与基类之间的转换功能。 首先,我们来看`dynamic_cast`。`dynamic_...
标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast
本文将详细介绍四种主要的显式类型转换:`static_cast`、`dynamic_cast`、`const_cast`和`reinterpret_cast`。 首先,`static_cast`主要用于非多态类型的转换,它不提供运行时的类型检查。例如,当进行基类与子类...
使用标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast。 const_cast,字面上理解就是去const属性。 static_cast,命名上理解是静态类型转换。如int转换成char。 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*到...
然而,C-style类型转换存在潜在的风险,因此,C++引入了四个新的类型转换关键字:`static_cast`、`dynamic_cast`、`reinterpret_cast`和`const_cast`,以提供更精确和安全的转换控制。下面是这些关键字的详细解释: ...
static_cast和dynamic_cast是C++的类型转换操作符。编译器隐式执行的任何类型转换都可以由static_cast显式完成,即父类和子类之间也可以利用static_cast进行转换。而dynamic_cast只能用于类之间的转换。那么dynamic_...
本文将详细介绍C++中的四种显式类型转换:static_cast、dynamic_cast、const_cast和reinterpret_cast。 1. static_cast static_cast是一种静态类型转换,用于非多态类型之间的转换,不提供运行时的检查来确保转换...
C++提供了多种类型转换方式,包括`static_cast`、`dynamic_cast`、`const_cast`以及`reinterpret_cast`。本文将重点探讨`dynamic_cast`的使用方法、注意事项及其与其他类型转换符的对比,旨在为读者提供全面而深入的...
呵呵,今天来好好看看着几个转换操作符的用法。以前老是看着眼熟,但是用着手生。今天决定搞定这些个东西。在C语言中类型转换有几种方式:1.(expression).在表达式外边加括号,由编译器来决定怎么改变。...