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

static_cast <>和C样式转换有什么区别?

static_cast <>和C样式转换有什么区别?

C++
收到一只叮咚 2019-07-30 10:48:54
static_cast <>和C样式转换有什么区别?有什么理由喜欢static_cast<>超过C风格的演员吗?它们是等价的吗?他们有什么速度差异吗?
查看完整描述

3 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

编译器检查C ++样式转换。C样式强制转换不是,并且可能在运行时失败

此外,可以轻松搜索c ++样式转换,而搜索c样式转换则非常困难

另一个很大的好处是4种不同的C ++风格转换更清晰地表达了程序员的意图。

在编写C ++时,我几乎总是使用C ++而不是C风格。


查看完整回答
反对 回复 2019-07-30
?
长风秋雁

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

简而言之

  1. static_cast<>() 给你一个编译时检查能力,C-Style演员没有。

  2. static_cast<>() 更具可读性,可以在C ++源代码中的任何地方轻松发现,C_Style强制转换。

  3. 使用C ++强制转换可以更好地传达意图。

更多说明

静态强制转换执行兼容类型之间的转换。它类似于C风格的演员表,但更具限制性。例如,C样式转换将允许整数指针指向char。

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

由于这会导致指向已分配内存的1个字节的4字节指针(指向4字节数据类型的指针),因此写入此指针将导致运行时错误或将覆盖某些相邻内存。

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

与C样式转换相比,静态转换将允许编译器检查指针和指针数据类型是否兼容,这允许程序员在编译期间捕获这种不正确的指针赋值。

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

您还可以在有关C ++演员表的更多说明中查看此页面:单击此处


查看完整回答
反对 回复 2019-07-30
?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

请参阅C ++强制转换运算符的比较

但是,对于各种不同的转换操作使用相同的语法可能会使程序员的意图不清楚。

此外,在大型代码库中找到特定类型的强制转换可能很困难。

对于所有需要的只是简单转换的情况,C风格演员的普遍性可能是过度的。在具有不同功率的几个不同铸造操作员之间进行选择的能力可以防止程序员无意中铸造到不正确的类型。


查看完整回答
反对 回复 2019-07-30
  • 3 回答
  • 0 关注
  • 1130 浏览

添加回答

举报

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