为了账号安全,请及时绑定邮箱和手机立即绑定

为什么使用静态_CAST<int>(X)而不是(Int)x?

为什么使用静态_CAST<int>(X)而不是(Int)x?

C++
开满天机 2019-06-20 10:40:52
为什么使用静态_CAST<int>(X)而不是(Int)x?我听说static_cast功能应优先于C型或简单功能型铸造.这是真的吗?为什么?
查看完整描述

3 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

一个实用的提示:如果您计划整理项目,可以轻松地搜索源代码中的StaticCAST关键字。


查看完整回答
反对 回复 2019-06-20
?
交互式爱情

TA贡献1712条经验 获得超3个赞

总之:

  1. static_cast<>()

    给你一个编译时间检查能力,C风格的转换没有.
  2. static_cast<>()

    在C+源代码中的任何地方都可以很容易地发现;相反,C_样式的强制转换更难识别。
  3. 使用C+强制转换可以更好地表达意图。

更多解释:

静态强制转换在兼容类型..它类似于C型演员,但限制性更强。例如,C样式的强制转换将允许一个整数指针指向一个字符.

char c = 10;       // 1 byteint *p = (int*)&c; // 4 bytes

由于这将导致一个指向1字节分配内存的4字节指针,因此向该指针写入将导致运行时错误或覆盖一些相邻内存。

*p = 5; // run-time error: stack corruption

与C样式的强制转换不同,静态强制转换将允许编译器检查指针和切入点数据类型是否兼容,这允许程序员在编译期间捕获这个不正确的指针分配。

int *q = static_cast<int*>(&c); // compile-time error

阅读更多内容:
静态铸造<>与C型铸造有什么区别?

规则型与静态型与动态型


查看完整回答
反对 回复 2019-06-20
  • 3 回答
  • 0 关注
  • 1455 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信