1 与C有关的类型转换
#include<iostream>
using namespace std;
int main()
{
float a = 1.0f;
// 输出强制转换的结果
cout << (int)a << endl;
// 输出地址
cout << &a << endl;
// boolalpha表示用true或者false表示输出的结果
cout << boolalpha << ((int)a == (int &)a) << endl;
return 0;
}
2 类型转换的应用,存储大小端问题
#include<iostream>
using namespace std;
int main()
{
unsigned int a = 0xFFFFFFF7;
unsigned char c = (unsigned char)a;
char *b = (char *)&a;
printf("%08x, %08x", c, *b);
return 0;
}
C++定义了一组内置对象之间的标准转换,在必要时他们被编译器隐式的应用到对象之上:
隐式对象转换发生在下列的几种情况下:
1.在混合类型的算数表达式当中
#include<iostream>
using namespace std;
int main()
{
int val = 3;
double dval = 3.14;
// val在运算之前被提升为double类型
dval += val;
cout << dval << endl; // 6.14
return 0;
}
2 用一种类型的表达式赋值给另一种类型的对象。
// 0被转换为int*类型的指针
int *pi = 0;
// dval被截取为int类型的数据
val = dval;
3 把一个表达式传递给一个函数,调用表达式的类型与形式参数的类型不相同,在这种情况下目标转换的类型是形式参数的类型。
extern double sqrt(double);
// 2被提升为double类型
sqrt(2);
4 从一个函数返回的表达式类型与函数定义的返回类型不一致
double diff(int val1, int val2)
{
// 返回值类型被提升为double
return val1 - val2;
}