C++ 类型转换

2025年03月17日 | 阅读 9 分钟

本节将讨论 C++ 编程语言中变量的类型转换。类型转换是指在程序中将一种数据类型转换为另一种数据类型。类型转换可以通过两种方式进行:自动由编译器完成,或由程序员或用户手动完成。类型转换也称为类型转换。

Type Casting in C++

例如,假设给定的数据是整数类型,而我们想将其转换为浮点类型。因此,我们需要手动将 int 数据类型转换为 float 类型,这种类型的转换称为 C++ 中的类型转换。

2nd 示例

类型转换分为两种类型:隐式转换或隐式类型转换,以及显式类型转换或显式类型转换。

隐式类型转换或隐式类型转换

  • 这称为自动类型转换。
  • 它无需外部干预(如程序员或用户)即可自动从一种数据类型转换为另一种数据类型。这意味着编译器会自动将一种数据类型转换为另一种数据类型。
  • 所有数据类型都会自动升级为更大的类型,而不会丢失任何信息。
  • 只有当两个变量彼此兼容时,它才能在程序中应用。

注意:隐式类型转换应从低数据类型到高数据类型进行。否则,它会影响基本数据类型,可能导致精度或数据丢失,并且编译器可能会为此发出警告。

用于 C++ 隐式类型转换的程序

让我们创建一个示例来演示在 C++ 中使用隐式类型转换将一个变量转换为另一个变量。

输出

Implicit Type Casting
The value of x: 200
The value of y: 200
Type casting char to int data type ('a' to 20): 117
Type casting from int data to float type: 85

在上面的程序中,我们声明了一个 short 数据类型的变量 x,值为 200,以及一个 int 变量 y。之后,我们将 x 的值赋给 y,然后编译器会自动将 short 数据类型的值 x 转换为 y,返回 y 为 200。

在接下来的表达式中,我们声明了一个 int 类型变量 num,值为 20,以及一个 char 类型变量 ch,值为 'a',它等效于整数值 97。然后,我们将这两个变量相加执行隐式转换,表达式的结果为 117。

类似地,在第三个表达式中,我们将 int 变量 num(值为 20)和 char 变量 ch(值为 65)相加,然后将结果赋给 float 变量 val。因此,表达式的结果会自动由编译器转换为 float 类型。

显式类型转换或显式类型转换

  • 这在程序中也称为手动类型转换。
  • 它由程序员或用户手动转换,用于在程序中将一种数据类型更改为另一种数据类型。这意味着用户可以根据程序中的要求轻松地将一种数据转换为另一种数据。
  • 它不需要检查变量的兼容性。
  • 在此转换中,我们可以在程序中将一个变量的数据类型升级或降级为另一个。
  • 它使用 cast() 运算符来更改变量的类型。

显式类型转换的语法

type:表示要转换给定表达式的用户定义数据。

expression:表示要转换数据类型的常量值、变量或表达式。

例如,我们有一个浮点数为 4.534,要将其转换为整数值,语句如下:

当执行上述语句时,浮点值将使用 cast() 运算符转换为整数数据类型。然后,将浮点值赋给整数 num,它会截断小数部分,只显示整数值 4。

演示 C++ 中显式类型转换用法的程序

让我们创建一个简单的程序,使用 C++ 编程语言中的显式类型转换将一种类型变量转换为另一种类型。

输出

Implicit Type Casting:
Result: 4

Explicit Type Casting:
The value of float variable (res): 4.2

在上面的程序中,我们有两个整数变量 a 和 b,其值分别为 21 和 2。然后,将 a 除以 b (21/2),返回一个 int 类型的值 4。

在第二个表达式中,我们声明了一个 float 类型变量 res,它使用显式类型转换方法中的 cast 运算符存储 a 和 b 的结果,而不会丢失任何数据。

通过 cast 运算符将 double 数据转换为 int 和 float 类型的程序

让我们考虑一个示例,在 C++ 编程中通过将 double 数据转换为 float 和 int 类型来获取矩形的面积。

输出

The length of the rectangle is: 
57.3456
The breadth of the rectangle is:
12.9874
The area of the rectangle is: 740

The length of the rectangle is: 57.3456
The breadth of the rectangle is: 12.9874
The area of the rectangle is: 744.77

一些不同类型的类型转换

在类型转换中,有一个 cast 运算符,它根据程序的需要强制将一种数据类型转换为另一种数据类型。C++ 有四种不同类型的 cast 运算符。

  1. Static_cast
  2. dynamic_cast
  3. const_cast
  4. reinterpret_cast

Static Cast

static_cast 是一种简单的编译时转换,用于将一种数据类型转换为另一种。这意味着它不会在运行时检查数据类型是否转换有效。因此,程序员或用户有责任确保转换安全有效。

static_cast 能够执行隐式转换所执行的所有转换。它还执行相关类指针之间的转换(向上转换 - > 从派生类到基类,或向下转换 - > 从基类到派生类)。

Static Cast 的语法

演示 Static Cast 用法的程序

让我们创建一个简单的示例,在 C++ 编程中使用类型转换的 static cast。

输出

Before using the static cast:
The value of l = 39.375
After using the static cast:
The value of tot = 39

Dynamic Cast

dynamic_cast 是一种运行时转换运算符,用于仅在类指针和引用上执行一种类型变量到另一种类型的转换。这意味着它在运行时检查变量是否可以有效转换,如果转换失败,则返回 NULL 值。动态转换基于 RTTI(运行时类型识别)机制。

演示 C++ 中 Dynamic Cast 用法的程序

让我们创建一个简单的程序来执行 C++ 编程语言中的 dynamic_cast。

输出

Dynamic casting is done successfully.

Reinterpret Cast 类型

reinterpret_cast 类型转换用于将指针转换为任何其他类型的指针,无论给定指针是否属于彼此。这意味着它不检查指针或指针指向的数据是否相同。它还将指针转换为整数类型或反之亦然。

reinterpret_cast 类型的语法

在 C++ 中使用 Reinterpret Cast 的程序

让我们编写一个程序来演示在 C++ 语言中使用 reinterpret 进行指针转换。

输出

The value of pt: 0x5cfed0
The value of ch: A
The value of *ptr: 65
The value of *ch: A

Const Cast

const_cast 用于更改或操作源指针的 const 行为。这意味着我们可以通过两种方式执行 const:将 const 指针设置为非 const 指针,或删除 const 指针的 const。

Const Cast 类型的语法

在 C++ 中使用 Const Cast 的程序

让我们编写一个程序,使用 const_cast 在 C++ 中将源指针转换为非 const 指针。

输出

The value of ptr cast: 500