总结
豆包 AI 助手文章总结

c++类型转换

angryTom
发布: 2019-10-26 11:02:08
原创
5826人浏览过

c++类型转换

c++++类型转换

在 C 语言中,进行类型转换只需要在变量前面加上变量类型,并且转换可以是双向的。例如 int 类型可以转换为 double 类型,double 类型也可以转换为 int 类型。(推荐教程:c++手册教程

但是这种简单粗暴的方式在 C++ 中是不合适的。第一,无法完成 C++ 中的自定义数据类型类;第二,C 语言可以在任意类型之间转换,比如可以将一个指向 const 型对象的指针转换为指向一个非 const 型对象的指针,这对类型检查非常严格的 C++ 来说,显然是不合理的,所以 C++ 提供了4种特有类型转换操作符。

1、static_cast

类似于 C 语言中的类型转换,可以进行无条件类型转换。应用场景:

立即学习C++免费学习笔记(深入)”;

基本类型转换。

int i = 1;
double j = static_cast <double> (i);
登录后复制

父类和子类指针之间的转换。如果父类指针指向一个对象,此时将父类指针转换为子类指针是不安全的,子类指针转换为父类指针是安全的。

class Base( ) { };
class Derived : public Base { };
Base * p1 = new Base;
Derived * p2 = new Derived;
Derived * p3 = static_cast <Derived *> (p1);      // 不安全
Base * p4 = static_cast <Base *> (p2);  // 安全
登录后复制

将任何类型的表达式转换为 void 类型。

注:static_cast 不能去除类型的 const 或者 volatile 属性;不能进行无关类型转换(如非基类和子类)。

2、dynamic_cast

dynamic_cast 只能用于对象指针之间的转换,转换结果亦可以是应用。在类层次间进行上行转换时,dynamic_cast 和 static_cast 的效果是一样的;在进行下行转换时,dynamic_cast 具有类型检查的功能,比 static_cast 更安全。

class Base { virtual void dummy ( ) { } };
class Derived : public Base { };
Base *  b1 = new Base;
Base * b2 = new Derived;
Derived * b3 = dynamic_cast <Derived * > (b1);  //  转换失败,返回 NULL
Derived * b4 = dynamic_cast <Derived * > (b2);  // 转换成功
Derived & b5 = dynamic_cast <Derived & > (b1);   // 转换失败(抛出异常)
Derived & b6 = dynamic_cast <Derived & > (b2);  // 转换成功
登录后复制

注:父子类指针之间转换时,该父类中必须包含一个虚函数。

3、const_cast

用于取出 const 属性,去掉类型的 const 或者 volatile 属性,将 const 类型的指针变为非 const 类型的指针。

const int * fun(int x, int y) { }; 
int * ptr = const_cast < int * > (fun(2, 3));
登录后复制

4、reinterpret_cast

reinterpret_cast 只是重新解释类型,没有二进制的转换。应用:

转换的类型必须是一个指针、引用、算术类型、函数指针或者成员指针。比特位级别上进行转换。它可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针(先把一个指针转换成一个整数,再把该整数转换成原类型的指针,还可以得到原先的指针值)。但不能将非32bit的实例转成指针。

一般用在函数指针类型之间进行转换。

不能保证可移植性。

注:此类型转换不安全,需谨慎使用。

以上就是c++++类型转换的详细内容,更多请关注php中文网其它相关文章!

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
相关标签:
c++
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
豆包 AI 助手文章总结
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号