举例说明什么是C++中的类型转换?

195 阅读6分钟

类型转换是指为了便于计算,将一种数据类型转换为另一种数据类型的方法。C++编程语言也支持类型转换。就本文而言,我们将深入了解这一现象,以及如何在Ubuntu 20.04系统上用C++语言实现这一功能。

什么是C++中的类型转换?

我们已经说过,类型转换将一个变量或表达式从一种数据类型转换为另一种。在C++中主要有两种类型的类型转换,即隐式类型转换和显式类型转换。在前一种类型中,我们不指定我们要将表达式类型化的数据类型,而在后一种类型中,我们明确说明我们要转换给定表达式的数据类型。

Ubuntu 20.04中C++类型转换的例子

下面的例子旨在通过与相关场景的联系来教你一些不同形式的类型转换。通过所有这些例子,你将能够知道如何在C++中使用类型转换技术将一种数据类型有效地转换为另一种。

例子1:通过C风格的类型转换,将数字转换为其等效的ASCII字符

在这个例子中,我们想把一个数字传给我们的C++代码,并使用C风格的类型转换将其转换为等价的ASCII字符。在C语言中,类型转换的数据类型被括在圆括号内,后面是要进行类型转换的表达式。通过下面的C++程序,你将能够获得这种类型转换方式。

对于这个特殊的例子,我们创建了一个名为 "TypeCasting.cpp "的文件,它将包含我们的C++代码。我们在这段代码中首先包含了所需的库,其次是 "std "命名空间。然后,我们有 "main() "函数,其中我们简单地使用了 "cout "语句,它将在终端上打印数字 "65 "的ASCII等价物。

一旦我们保存了我们的C++代码,我们就用下面的命令将其编译。

$ g++ TypeCasting.cpp –o TypeCasting

我们使用 "g++"编译器来编译我们的C++代码,"TypeCasting.cpp "是我们的源文件,而 "TypeCasting "将是这次编译后创建的对象文件。

现在,我们可以用以下命令执行我们的对象文件。

$ ./TypeCasting

数字 "65 "的ASCII对应字符是 "A",如下图所示。

例子2:通过C风格的类型转换生成整个ASCII表

我们也可以在Ubuntu 20.04中使用相同的C风格类型化来生成整个ASCII表。为此,我们在Ubuntu 20.04系统上实现了以下C++代码。

在这段C++代码中,在包括必要的库和命名空间之后,我们有一个 "main() "函数,其中有一个 "for "循环。这个循环遍历了一个名为 "alphabet "的变量。我们用 "0 "来初始化这个变量,而这个循环的终止条件是 "alphabet<128"。之后,我们简单地增加了 "alphabet "变量。在这个循环的主体中,我们有一个 "cout "语句,它将打印与0到127的每个字母相对应的ASCII码。

保存这段C++代码后,我们编译并执行了它,结果是我们能够在Ubuntu 20.04终端上生成整个ASCII表,如下图所示。

例子3:通过功能类型转换将浮点数转换为整数,进行赋值操作

在这个例子中,我们将学习一种不同的类型化方法,即功能类型化。在这种类型转换方法中,我们的数据类型没有任何括号,然后在圆括号内写上要进行类型转换的表达。这种类型转换方式看起来更像是在C++中调用一个函数,这就是为什么它被称为功能性类型转换。此外,这也是一种显式类型化的形式。在这个例子中,我们的主要目标是将一个浮点数转换成一个整数,以便进行赋值操作。你可以看看下面的C++代码,了解我们到底要做什么。

在这段C++代码中,我们声明了一个浮点数变量 "x",并将其赋值为 "12.4"。然后,我们声明了一个变量 "y",它的数据类型是整数。我们想把变量 "x "的值分配给 "y",这只有在 "x "也是一个整数的情况下才有可能。因此,我们必须在将变量 "x "分配给 "y "的同时,将其类型转换为整数数据类型。最后,我们想在终端机上打印变量 "y "的值,以查看变量赋值是否正确。

当我们执行这段代码时,变量 "y "的值变成了 "12",这意味着变量赋值成功了,因为每当我们试图将一个浮点数打成整数时,其小数部分总是被截断。这可以从下面的图片中看出。

例子4:通过隐式类型转换将整数转换为浮点数进行赋值操作

在这个例子中,我们将学习另一种不同的类型转换方法,即隐式类型转换。在这种类型化方法中,我们并不明确指定我们要对变量进行类型化的数据类型;相反,这种决定是在运行时根据变量的数据类型来决定的,因为变量要被分配一个值。在这个例子中,我们的主要目标是将两个整数的除法结果转换为一个浮点数,以便进行赋值操作。你可以看看下面的C++代码,了解我们到底要做什么。

在这段C++代码中,我们声明了两个整数变量 "x "和 "y",并分别为它们赋值 "12 "和 "5"。然后,我们声明了一个变量 "z",它的数据类型是浮点数。我们想把 "x/y "的结果分配给 "z",这只有在 "x/y "的结果也是浮点数的情况下才可能。然而,在隐式类型转换的情况下,我们不一定需要将 "x/y "转换为浮点数;相反,可以像我们的代码中那样,将其原样分配给变量 "z"。最后,我们想在终端上打印变量 "z "的值,以了解变量赋值是否正确。

当我们执行这段代码时,变量 "z "的值变成了 "2",这意味着关于隐式类型化的变量赋值是成功的,因为每当我们试图用隐式类型化将一个整数转换成一个浮点数时,其小数部分总是被截断。这可以从下面的图片中看出。

结论

我们想在这篇文章中向你解释Ubuntu 20.04中C++中类型转换的概念。我们首先解释了类型转换的不同类型,然后我们列举了几个不同的例子,阐述了C++中类型转换的概念。这篇文章只是对C++中的类型转换做了一个基本概述。按照同样的思路,你也可以进行其他数据类型的转换。