18、基础 | C++强制类型转换

四种强制类型转换

1. 出现的原因

C语言的强制类型转换,有着两种。

  1. 隐式类型转换
  2. 显示的强制类型转换

举例:

int main()
{
    int i = 1;
    double d = i;//隐式类型转换
    int* p = &i;
    int address = (int)p;//显示强制类型转换
    return 0;
}

缺陷:

  • 转换的可视化比较差,对于隐式类型转换来说
  • 对于所有的转化形式都是使用()类型书写的,却别程度不高

所以对于C++来说,为了加强类型转化的可视性,出现了四种强制类型转化

可以根据名字直接判断出是进行的什么类型的转化。

2. 四种类型转换分别是什么

1. static_cast

作用:用于非多态类型之间的转化(静态转化),等价于C语言中的隐式类型转化

缺点:不能用于两个不相关类型之间的转化。比如:int类型到int*类型的转化

举例:

int main()
{
    int i = 1;
    double d = static_cast<double>(i);
    std::cout << d << std::endl;
    retrun 0;
}

2. reinterpret_cast

作用:将一种类型转化为另外一种类型。等价于C语言中的显示强制类型转化

缺点:对于数据随意的转化,会出现无法预估的问题。尽量不要使用

举例:

int main()
{
    int i = 10;
    int* p = &i;
    int j = reinterpret_cast<int>(p);
    return 0;
}

3. const_cast

作用:删除变量的const属性,方便赋值

缺点:由于编译器的优化,就会导致访问const类型的变量的时候,不能实时的访问,有可能内存的值已经发生改变,但是访问到的还是旧的数据

解决:使用volatile关键字,确保内存的可见性,每次访问一个数据的时候到内存中直接去拿取数据

举例:

int main()
{
    const int i = 10;
    int* p = const_cast<int*>(&a);
    *p = 20;
    std::cout << a << std::endl;
    return 0;
}

4. dynamic_cast

作用:用于将一个父类对象的指针转化为一

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

C/C++面试必考必会 文章被收录于专栏

【C/C++面试必考必会】专栏,直击面试核心,精选C/C++及相关技术栈中面试官最爱的必考点!从基础语法到高级特性,从内存管理到多线程编程,再到算法与数据结构深度剖析,一网打尽。助你快速构建知识体系,轻松应对技术挑战。希望专栏能让你在面试中脱颖而出,成为技术岗的抢手人才。

全部评论

相关推荐

投递京东等公司10个岗位
点赞 评论 收藏
分享
温州头等大孝子:你们的确很幸福,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了
字节跳动开奖368人在聊
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-16 17:28
码农索隆:1.一页 2.项目展开讲你的贡献 3.废话太多,精简一些
点赞 评论 收藏
分享
08-13 13:54
门头沟学院 Java
被卡学历了简历挂,绷不住了...
去哪儿旅行呢:估计看你有字节实习也不会去
投递4399游戏等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务