原文: https://www.programiz.com/cpp-programming/type-conversion

在本教程中,我们将借助示例学习 C++ 类型转换的基础知识。

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

C++ 中有两种类型的类型转换。

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

隐式类型转换

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

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


示例 1:从int转换为double

  1. // Working of implicit type-conversion
  2. #include <iostream>
  3. using namespace std;
  4. int main() {
  5. // assigning an int value to num_int
  6. int num_int = 9;
  7. // declaring a double type variable
  8. double num_double;
  9. // implicit conversion
  10. // assigning int value to a double variable
  11. num_double = num_int;
  12. cout << "num_int = " << num_int << endl;
  13. cout << "num_double = " << num_double << endl;
  14. return 0;
  15. }

输出

  1. num_int = 9
  2. num_double = 9

在程序中,我们已将int数据分配给double变量。

  1. num_double = num_int;

此处,在将int值分配给num_double变量之前,编译器会自动将其转换为double。 这是隐式类型转换的示例。


示例 2:自动从double转换为int

  1. //Working of Implicit type-conversion
  2. #include <iostream>
  3. using namespace std;
  4. int main() {
  5. int num_int;
  6. double num_double = 9.99;
  7. // implicit conversion
  8. // assigning a double value to an int variable
  9. num_int = num_double;
  10. cout << "num_int = " << num_int << endl;
  11. cout << "num_double = " << num_double << endl;
  12. return 0;
  13. }

输出

  1. num_int = 9
  2. num_double = 9.99

在程序中,我们已将double数据分配给int变量。

  1. num_double = num_int;

此处,在将double值分配给num_int变量之前,编译器会自动将其转换为int。 这也是隐式类型转换的示例。

注意:由于int不能为小数部分,因此在上面的示例中,小数点后的数字被截断了。


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

从上面的示例可以看出,从一种数据类型转换为另一种数据类型很容易造成数据丢失。 当较大类型的数据转换为较小类型的数据时,会发生这种情况。

C   类型转换 - 图1

类型转换期间可能的数据丢失


C++ 显式转换

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

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

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

C 风格转换

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

这种样式的语法是:

  1. (data_type)expression;

例如,

  1. // initializing int variable
  2. int num_int = 26;
  3. // declaring double variable
  4. double num_double;
  5. // converting from int to double
  6. num_double = (double)num_int;

函数样式转换

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

The syntax for this style is:

  1. data_type(expression);

For example,

  1. // initializing int variable
  2. int num_int = 26;
  3. // declaring double variable
  4. double num_double;
  5. // converting from int to double
  6. num_double = double(num_int);

示例 3:类型转换

  1. #include <iostream>
  2. using namespace std;
  3. int main() {
  4. // initializing a double variable
  5. double num_double = 3.56;
  6. cout << "num_double = " << num_double << endl;
  7. // C-style conversion from double to int
  8. int num_int1 = (int)num_double;
  9. cout << "num_int1 = " << num_int1 << endl;
  10. // function-style conversion from double to int
  11. int num_int2 = int(num_double);
  12. cout << "num_int2 = " << num_int2 << endl;
  13. return 0;
  14. }

输出

  1. num_double = 3.56
  2. num_int1 = 3
  3. num_int2 = 3

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


类型转换运算符

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

  • static_cast
  • dynamic_cast
  • const_cast
  • reinterpret_cast

我们将在以后的教程中了解这些强制转换。


推荐教程

  • C++ 字符串转换为int,反之亦然
  • C++ 字符串转换为floatdouble,反之亦然