导入
显式转换
在本节课中,我们将学习如何在 C++ 中进行显式类型转换。
编译器在进行运算时会自动执行隐式类型转换。然而,C++ 也允许我们使用显式类型转换。
C++ 提供了四种命名的类型转换操作符:
dynamic_caststatic_castconst_castreinterpret_cast
接下来将逐一介绍每种操作符的功能。
语法
显式类型转换操作符需要指定目标类型。其使用方式如下:
1double myDouble{5.5}; 2int i = static_cast<int>(myDouble);
C 风格类型转换
C 风格类型转换是原始的类型转换方式,用于将数据从一种类型转换为另一种类型。其格式如下:
1(type) value_or_expression
示例如下:
1double myDouble{5.5}; 2int i = (int)myDouble;
我们应避免使用 C 风格类型转换,因为它们存在诸多问题。
C 风格类型转换的问题在于:我们无法明确知道实际使用的是哪种转换。如果执行 C 风格转换,系统可能会根据需要组合使用多种转换。大致来说,C 风格转换从 static_cast 开始,接着是 const_cast,最后执行 reinterpret_cast。
让我们看看类型系统被破坏后会发生什么:
1#include <iostream> 2 3int main(){ 4 double d = 2; 5 auto p = (long*)&d; 6 auto q = (long long*)&d; 7 std::cout << d << ' ' << *p << ' ' << *q << '\n'; 8}
输出结果并不理想。这种转换可能在程序中引发严重问题。因此,始终建议使用命名的类型转换操作符,而不是 C 风格转换。
当然,你已经知道接下来要说什么了:显式优于隐式。