C++中的强制类型转换为什么要用static_cast和reinterpret_cast等

bandaoyu 2020-05-02 12:08:48
[例1]C语言所采用的类型转换方式:
int a = 10;
int b = 3;
double result = (double)a / (double)b;
例1中将整型变量a和b转换为双精度浮点型,然后相除。在C++语言中,我们可以采用static_cast关键字来进行强制类型转换,如下所示。

[例2]static_cast关键字的使用:
int a = 10;
int b = 3;
double result = static_cast<double>(a) / static_cast<double>(b);
在本例中同样是将整型变量a转换为双精度浮点型。采用static_cast进行强制数据类型转换时,将想要转换成的数据类型放到尖括号中,将待转换的变量或表达式放在元括号中,其格式可以概括为如下形式:
static_cast <类型说明符> (变量或表达式)


问题来了,为什么C++ 不继续沿用double result = (double)a / (double)b;,而用double result = static_cast<double>(a) / static_cast<double>(b);
后面的那个不是很繁琐吗?



还有reinterpret_cast 也是



在C++语言中,reinterpret_cast主要有三种强制转换用途:改变指针或引用的类型、将指针或引用转换为一个足够长度的整形、将整型转换为指针或引用类型。在使用reinterpret_cast强制转换过程仅仅只是比特位的拷贝,因此在使用过程中需要特别谨慎!

例7
int *a = new int;
double *d = reinterpret_cast<double *>(a);


double *d = reinterpret_cast<double *>(a); 直接写成 double *d = (double *)a; 有什么问题吗?
...全文
393 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
bandaoyu 2020-06-09
  • 打赏
  • 举报
回复
引用 4 楼 棉猴 的回复:
嗯,原来是一种行为规范。get it
bandaoyu 2020-05-04
  • 打赏
  • 举报
回复
引用 1 楼 真相重于对错 的回复:
百度一下几种cast的区别。。。。
说了等于没说?
真相重于对错 2020-05-04
  • 打赏
  • 举报
回复
引用 5 楼 bandaoyu 的回复:
引用 3 楼 真相重于对错 的回复:
照你这么说,有什么内容是百度不到的吗?人家来问当然是希望得到同行消化过后更加易于理解和记忆的内容,而不是百度出来的生硬概念。如果你觉得没必要回答,你可以不回答,不要带坏风气对你我都不好
我不是在赞同你的意见吗?
bandaoyu 2020-05-04
  • 打赏
  • 举报
回复 1
引用 3 楼 真相重于对错 的回复:
照你这么说,有什么内容是百度不到的吗?人家来问当然是希望得到同行消化过后更加易于理解和记忆的内容,而不是百度出来的生硬概念。如果你觉得没必要回答,你可以不回答,不要带坏风气对你我都不好
棉猴 2020-05-04
  • 打赏
  • 举报
回复
真相重于对错 2020-05-04
  • 打赏
  • 举报
回复
引用 2 楼 bandaoyu 的回复:
引用 1 楼 真相重于对错 的回复:
百度一下几种cast的区别。。。。
说了等于没说?
确实。 1、百度上边完全可以查到。我说了不过是复读机。 2、如果百度上边能查到,你却不去查,或者查了你也不懂,我说了也等于白说。
真相重于对错 2020-05-03
  • 打赏
  • 举报
回复
百度一下几种cast的区别。。。。

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧