我们之前一节介绍了基本数据类型,知道了在 C++ 中存在很多不同的数据类型,那么数据类型之间可以互相转换吗?
首先我们来看比较明显的转换
#include <stdio.h> int main(int argc,char **argv) { int a = 100; short b = a; return 0; }
这段程序中,我们把一个 int 变量赋值给了一个 short 变量,我们在之前的课程中学习过,short 通常占两个字节,int 通常占用 4 个字节,也就是说,short 的"容量"其实是要比 int 的"容量"要小的。当出现这种情况的时候,就像是把一个大杯子里的水倒进一个小杯子,是有可能溢出来撒一地的。在 C++ 中,这样做是有可能损失数据的,所以 C++ 是不允许我们直接进行转换的。那么如何才能强制将一个 int 转换为 short 呢?我们将代码改成下面这样就可以了
#include <stdio.h> int main(int argc,char **argv) { int a = 100; short b = (short)a; return 0; }
修改后代码就不报错了,这里我们在 a 前面加上了 (short),就是要告诉我们的编译器,我很清楚我在做什么,我就是要将 int 转换成 short,我们管这种转换叫做强制转换,因为在转换的时候我们写清楚了要转换的类型是什么,所以也叫做显式转换。
接下来,我们再来看看隐式转换,还是来看一段代码
#include <stdio.h> int main(int argc,char **argv) { short a = 100; int b = a; return 0; }
我们把一个 short 类型转换成一个 int 类型,这里没有使用 (int) 之类的代码,程序也没有报错。这是因为在这里,我们把一个比较小的数据类型转换成了一个比较大的数据类型,数据在转换的过程中是安全的,不会损失精度,那么在这种情况下,C++ 允许直接进行转换,由于在转换的时候没有进行指定数据类型,所以叫做隐式转换。
隐式转换会遵守一个推演表,依照这个顺序进行转换,就不需要显式得指明类型
提示:按住键盘上的Ctrl键,鼠标滚轮向上滚动,图片就可以看清楚了