在C++中,类型转换是将一个数据类型转为另外一个数据类型,其转换过程比较复杂,目前只讨论基本数据类型之间的转换。
类型转换分为两部分:隐式转换和显示转换
隐式转换又称为自动转换,显示转换又称为强制转换。
隐式转换(自动转换)
这个转换是由编译器自动完成,编译器会自动将较小类型转换为较大精英,比如将int转为float,将int转为 long ,将float 转为double等,这种转换不会有数据精度的损失。
#include <iostream>
using namespace std;
int main() {
short int shortNumber=10;//定义一个short型
cout <<"typeId:"<< typeid(shortNumber).name() << endl;
int intNumber=10;
cout <<"typeId:"<< typeid(intNumber).name() << endl;
int intNumber2=shortNumber; //定义一个整数型,并且将short型直接赋值给整数型
cout <<"typeId:"<< typeid(intNumber2).name()<< " value:"<<intNumber2 << endl;
}
上面的内容,是一个隐式转换,由编译器自动完成,没有报错和警告,可以直接运行
显式转换(强制转换)
如下面的将double转为int类型,涉及到精度变化或丢失就需要强制转换了
#include <iostream>
using namespace std;
int main() {
double d = 3.14;
int i = (int)d; // double转为int 类型,因为涉及到精度丢失,所以必须使用强制转换,只保留整数部分
cout << "typeId:" << typeid(d).name()<<" value:"<< d << endl;
cout << "typeId:" << typeid(i).name()<<" value:"<< i << endl;
}
转换成i类型后,丢失了小数部分,降低了精度。
强制转换一般是在变量前面加上要转换成的数据类型,如上面的(int) d这样的形式。在后面实际开发过程中,涉及到的话,再详情讲,只要大家知道,不同精度之间的数据可以通过自动或强制转换数据类型即可。