static_cast<> 和传统C有什么区别呢?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (13)

有没有什么理由更喜欢static_cast<>而不是C风格?它们是否相同?他们有什么样的速度差异?

提问于
用户回答回答于

编译器检查C ++风格转换。C风格转换不是,可能会在运行时失败

另外,c ++风格的转换可以很容易地被搜索到,而真的很难搜索c风格的转换

用户回答回答于

总之

  1. static_cast<>() 有一个编译时间检查能力,C风格没有。
  2. static_cast<>() 更易读,并且可以很容易地在C ++源代码中的任何地方发现,C_Style cast 不行。
  3. 使用C++强制转换的意图被传达得更好。

更多解释

静态转换执行兼容类型之间的转换。它类似于C风格,但更具限制性。例如,C风格的转换将允许一个整数指针指向一个字符。

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

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

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

与C风格转换相反,静态转换将允许编译器检查指针和指针数据类型是否兼容,这允许程序员在编译期间捕获这个不正确的指针分配。

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

扫码关注云+社区