C++ 类型转换

本文介绍了 C++ 中类型转换的基础知识。

C++ 允许我们将一种类型的数据转换为另一种类型的数据。这称为类型转换。C++中有两种类型的转换:

  1. 隐式转换
  2. 显式转换(也称为类型转换)

隐式类型转换

由编译器自动完成的类型转换称为隐式类型转换。这种类型的转换也称为自动转换。

让我们看两个隐式类型转换的例子。

示例 1:从 int 转换为 double

#include <iostream>
using namespace std;

int main() {
   // 声明一个整数变量并赋值
   int num_int = 9;

   // 声明一个双精度浮点型变量
   double num_double;

   // 隐式转换
   // 从整型自动转换为双精度浮点型
   num_double = num_int;

   cout << "num_int = " << num_int << endl;
   cout << "num_double = " << num_double << endl;

   return 0;
}

输出

num_int = 9
num_double = 9

在程序中,我们已经将一个 int 数据赋值给了一个 double 变量。

num_double = num_int;

在这里,将 int 类型的值赋值给 double 类型的变量时,转换过程是自动完成的。这是隐式类型转换的一个例子。

示例 2:从 double 到 int 的自动转换

#include <iostream>
using namespace std;

int main() {

   int num_int;
   double num_double = 9.99;

   // 隐式转换
   // 将双精度浮点型赋值给整型
   num_int = num_double;

   cout << "num_int = " << num_int << endl;
   cout << "num_double = " << num_double << endl;

   return 0;
}

输出

num_int = 9
num_double = 9.99

在程序中,我们将一个 double 类型的数据赋值给了一个 int 类型的变量。

num_double = num_int;

在这里,将 double 类型的值赋值给 int 类型的变量时,转换过程是自动完成的。这也是隐式类型转换的一个例子。

! 注意: 由于 int 不能有小数部分,上例中小数点后的数字被截断。

转换期间的数据丢失(缩小转换)

正如我们从上面的例子中看到的,当较大类型的数据转换为较小类型的数据时容易导致数据丢失。

以下是所有类型从大到小的排序:

  1. long double
  2. double
  3. float
  4. long
  5. int
  6. short
  7. char

当位于上面的大类型转换为位于下面的小磊的时候,就可能会导致数据丢失。

C++ 显式转换

当用户手动将数据从一种类型更改为另一种类型时,这称为显式转换。这种类型的转换也称为类型转换

我们可以通过三种主要方式在 C++ 中使用显式转换。他们是:

  1. C 样式类型转换(也称为转换符号
  2. 函数表示法(也称为旧的 C++ 风格类型转换
  3. 类型转换运算符

C 风格类型转换

顾名思义,这种类型的转换受到C 编程语言的青睐。它也被称为转换符号

这种风格的语法是:

(data_type)expression;

例如,

// 初始化整型变量
int num_int = 26;

// 声明双精度浮点数变量
double num_double;

// 从整型转换为双精度浮点数
num_double = (double)num_int;

函数式转换

我们还可以使用函数将数据从一种类型转换为另一种类型。

这种风格的语法是:

data_type(expression);

例如,

// 初始化整型变量
int num_int = 26;

// 从整型转换为双精度浮点数
double num_double;

// 从整型转换为双精度浮点数
num_double = double(num_int);

示例 3:类型转换

#include <iostream>

using namespace std;

int main() {
    // 初始化一个双精度浮点数变量
    double num_double = 3.56;
    cout << "num_double = " << num_double << endl;

    // c 风格类型转换
    int num_int1 = (int)num_double;
    cout << "num_int1   = " << num_int1 << endl;

    // 函数风格类型转换
    int num_int2 = int(num_double);
    cout << "num_int2   = " << num_int2 << endl;

    return 0;
}

输出

num_double = 3.56
num_int1 = 3
num_int2 = 3

我们同时使用了 C 风格的类型转换函数风格的类型转换来进行类型转换并显示结果。由于它们执行相同的任务,因此两者都给我们相同的输出。

类型转换运算符

除了这两种类型转换,C++ 还有四个用于类型转换的操作符。它们被称为类型转换运算符。他们是:

  • static_cast
  • dynamic_cast
  • const_cast
  • reinterpret_cast

我们将在后面的教程中了解这些操作符。