首页 > 编程笔记 > C++笔记 阅读:10

C++类型转换:强制类型转换和隐式类型转换(附带实例)

C++ 中,变量的数据类型转换方式有两种:一种是隐式类型转换(又称为自动类型转换),一种是强制类型转换。

C++隐式类型转换

隐式类型转换发生在不同数据类型的量进行赋值或混合运算时,由编译系统自动完成,并遵循以下规则:
数据类型隐式转换的顺序如下图所示:


图 1 数据类型隐式转换的顺序

【实例 1】数据类型隐式转换。本实例中,定义一个字符型、一个整型和一个浮点型变量,利用隐式类型转换进行计算,具体代码如下:
#include <iostream>
using namespace std;

int main()
{
    double result;
    char a = 'k';
    int b = 10;
    float e = 1.515;
    result = (a + b) - e; // 运算结果自动转换为最高精度的数据类型 (double)
    printf("%f\n", result);
}
程序运行结果如下:

115.485001


注意,C++ 中整数的默认类型是 int,浮点数的默认类型是 double。如果一个计算中数字都是整数,则计算结果默认也是 int 型。但这样有时会出现一些“意想不到”的错误。

例如,计算 5 除以 2,如果这么写:
double b = 5 / 2;
计算后会发现 b 的值居然是 2.0,而不是 2.5。要想得到正确的答案,应该这样修改:
double b = 5.0 / 2; //把其中一个数改为浮点数,以保证精度

C++强制类型转换

强制类型转换是通过类型转换说明符来实现的,其一般形式如下:
类型说明符 (表达式)(类型说明符) 表达式
其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。

例如,“(float)x”表示把 x 强制转换为 float 型;“(int)(x+y)”表示把 x+y 的结果强制转换为 int 型;int(1.3) 表示将 1.3 强制转换为 int 型,最终结果为 1。

强制类型转换不改变数据说明时对该变量定义的类型。例如,下面的代码中 x 仍为 double 型:
double x;
(int)x;
使用强制类型转换,意味着将由程序员负责保证类型转换的正确性。

【实例 2】计算载货区摆放箱子的数量。一辆货车运输箱子,载货区宽 2m,长 4m,一个箱子宽 1.5m,长 1.5m,请问载货区一层可以放多少个箱子。注意,箱子必须以一个整体存在,不存在半个箱子。实现的具体代码如下:
#include <iostream>
using namespace std;

int main()
{
    int width = 2, length = 4, num;  // width、length 表示载货区大小
    float f = 1.5f;  // f 表示箱子规格
    num = (int)(width / f) * (int)(length / f);  // 计算装载量,并强制转换为整数
    cout << "载货区一层可以放" << num << "个箱子" << endl;
    return 0;
}
程序运行结果如下:

载货区一层可以放2个箱子


注意,如果要对某个表达式进行强制类型转换,需要用括号将表达式括起来,否则将只对表达式中的第一个变量或常量进行强制类型转换。例如:
float x = 2.5f, y = 4.7f;  // 定义两个 float 型变量并赋值
int m = (int)(x + y);      // 将表达式 x+y 的结果强制转换为整型,并赋给 m
int n = (int)x + y;        // 将 x 强制转换为整型,与 y 相加后,结果赋给 n

相关文章