Logo
Section 1 / 6

显式转换

在本节课中,我们将学习如何在 C++ 中进行显式类型转换。

导入

显式转换

在本节课中,我们将学习如何在 C++ 中进行显式类型转换。

编译器在进行运算时会自动执行隐式类型转换。然而,C++ 也允许我们使用显式类型转换。

C++ 提供了四种命名的类型转换操作符:

  • dynamic_cast
  • static_cast
  • const_cast
  • reinterpret_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 风格转换。

当然,你已经知道接下来要说什么了:显式优于隐式。

自动类型推导

动态转换