C++ 类型转换
提示
- 隐式类型转换:编译器自动进行的类型转换称为隐式 类型转换,例如将
int
自动转换为double
。 - 显式类型转换(类型转换):用户手动将数据从一种类型转换为另一种类型,称为显式转换,有三种方法:C风格类型转换、函数风格转换和类型转换运算符。
- 类型转换可能导致数据丢失:当将大类型的数据转换为小类型时,可能会导致数据丢失,如将
double
转换为int
时,小数部分会被截断。
C++ 允许我们将一种类型的数据转换为另一种类型。这被称为类型转换。
C++ 中有两种类型转换:
- 隐式转换
- 显式转换(也称为类型强制转换)
隐式类型转换
编译器自动完成的类型转换被称为隐式类型转换。这种转换也被称为自动转换。
让我们看两个隐式类型转换的例子。
示例 1:从 int 转换为 double
// 隐式类型转换的工作原理
#include <iostream>
using namespace std;
int main() {
// 给 num_int 赋一个 int 类型的值
int num_int = 9;
// 声明一个 double 类型的变量
double num_double;
// 隐式转换
// 将 int 类型的值赋给 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
值在赋给 num_double 变量之前被编译器自动转换为 double
。这是隐式类型转换的一个例子。
示例 2:从 double 自动转换为 int
// 隐式类型转换的工作原理
#include <iostream>
using namespace std;
int main() {
int num_int;
double num_double = 9.99;
// 隐式转换
// 将 double 类型的值赋给 int 变量
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_int = num_double;
这里,double
值在赋给 num_int 变量之前被编译器自动转换为 int
。这也是一个隐式类型转换的例子。
注意: 由于 int
不能有小数部分,所以在上面的示例中小数点后的数字被截断了。
转换过程中的数据丢失(缩小转换)
正如我们从上面的例子中看到的,从一种数据类型转换为另一种数据类型容易发生数据丢失。当将较大类型的数据转换为较小类型的数据时,就会发生这种情况。
C++ 显式转换
当用户手动将数据从一种类型转换为另一种类型时,这被称为显式转换。这种转换也被称为类型强制转换。
在 C++ 中,我们有三种主要的方式可以进行显式转换。 它们是:
- C 风格类型转换(也称为强制转换表示法)
- 函数表示法(也称为旧 C++ 风格类型转换)
- 类型转换运算符
C 风格类型转换
顾名思义,这种类型的转换受到 C 编程语言 的青睐。它也被称为强制转换表示法。
这种风格的语法是:
(数据类型)表达式;
例如,
// 初始化 int 变量
int num_int = 26;
// 声明 double 变量
double num_double;
// 从 int 转换为 double
num_double = (double)num_int;
函数风格转换
我们还可以使用类似函数的表示法来将数据从一种类型转换为另一种类型。
这种风格的语法是:
数据类型(表达式);
例如,
// 初始化 int 变量
int num_int = 26;
// 声明 double 变量
double num_double;
// 从 int 转换为 double
num_double = double(num_int);
示例 3:类型强制转换
#include <iostream>
using namespace std;
int main() {
// 初始化一个 double 变量
double num_double = 3.56;
cout << "num_double = " << num_double << endl;
// C 风格从 double 转换为 int
int num_int1 = (int)num_double;
cout << "num_int1 = " << num_int1 << endl;
// 函数风格从 double 转换为 int
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
我们将在后续教程中学习这些转换。