C++ 类型转换

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

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

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

  1. 隐式转换

  2. 显式转换(也称为强制类型转换)

相关转换:将 C ++字符串转换为int  C ++ String转换为float / double

隐式类型转换

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

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

示例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_double = num_int;

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

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

转换期间的数据丢失(窄化转换)

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

如果将较大类型的数据转换为较小类型,则C ++中的数据丢失。
类型转换期间,可能会发生数据丢失

C ++显式转换

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

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

  1. C型类型强制转换(也称为强制转换符号)

  2. 函数表示法(也称为老式c++风格的类型转换)

  3. 类型转换运算符

C 风格转换

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

这种样式的语法是:

(data_type)expression;

例如,

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

// 声明double变量
double num_double;

// 从int转换为double
num_double = (double)num_int;

函数样式转换

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

这种类型的语法是:

data_type(expression);

例如,

// 初始化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;

    // 从double到int的C风格转换
    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

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