C++--问题26--强制类型转换
1.C语言的类型强转
方式如下:
(Type)value/expression
就是在变量或者表达式前面加小括号和类型表示类型强转。
2.C++提供了自己特有的四种类型强转
分别如下:
(1)static_cast:
更安全的类型强转,
static_cast
它能在内置的数据类型间互相转换,对于类只能在有联系的指针类型间进行转换。
![](https://i-blog.csdnimg.cn/blog_migrate/606a5d4f574dba99757c23d2b5e40fc2.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5fc30c5d9e57d0db0c53d07c4e9e433b.png)
(2)dynamic_cast:
支持
RTTI
类型转换
,
通常在基类和派生类之间转换时使用
,
表达式
dynamic_cast<T*>(a)
将
a
值转换为类型为
T
的对象指针。如果类型
T
不是
a
的某个基类型(
a
变量的类型或者是a
类型的派生类类型),该操作将返回一个空指针,否则转换成功;
常用于运行时检测a
指
针指向的对象是否是特定派生类类型的对象。
![](https://i-blog.csdnimg.cn/blog_migrate/06589b7e607d08a191e2ff81243eb0ff.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b927dd02848da4bbdae25cd68c2db7e3.png)
(3)const_cast:
表达式
const_cast<T
>(a)
常被用于去除这里
a
变量或表达式的
const
属性,
a
的类型就是
T。
![](https://i-blog.csdnimg.cn/blog_migrate/0fa169bc089a9b8180d1c8f38d60d46f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/54557af35a76d6b5c14f1bb961784771.png)
(4)reinterpret_cast:
类似
C
的强转,任何指针都可以转换成其它类型的指针,不安全的。
![](https://i-blog.csdnimg.cn/blog_migrate/21b2b0def66bf6ee3693c65bd02eafb3.png)