static_cast<> 和 C 样式强制转换之间有什么区别?


这里我们将了解 static_cast<> 和普通 C 样式强制转换之间的区别。

像 (int)x 这样的普通强制转换是 C 样式类型转换,而 static_cast(x) 用于 C++。

这个 static_cast<>() 提供编译时检查功能,但 C 样式强制转换不支持该功能。这个 static_cast<>() 可以出现在 C++ 代码的任何地方。并且使用此 C++ 强制转换可以更好地传达意图。

在像 C 这样的强制转换中,有时我们可以将某种类型的指针强制转换为指向另一种类型的数据。

例如,一个整型指针也可以指向字符类型的数据,因为它们非常相似,唯一的区别是字符占用 1 个字节,整数占用 4 个字节。在 C++ 中,static_cast<>() 比 C 样式强制转换更严格。它只在兼容类型之间进行转换。

示例

char c = 65; //1-byte data. ASCII of ‘A’
int *ptr = (int*)&c; //4-byte

由于在 4 字节指针中,它指向分配的内存的 1 个字节,因此可能会产生运行时错误或覆盖一些相邻的内存。

在 C++ 中,static_cast<>() 将允许编译器检查指针和数据是否为同一类型。如果不是,它将在编译期间引发不正确的指针赋值异常。

char c = 65; //1-byte data. ASCII of ‘A’
int *ptr = static_cast<int>(&c);

这将生成编译时错误。

更新于: 2019年7月30日

3K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告