为什么使用static_cast(x)而不是(int)x在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日

2K+ 阅读量

开启你的职业生涯

完成课程获得认证

开始学习
广告