笔记会持续更新,有错误的地方欢迎指正,谢谢!
隐式类型转换
int a = 3.5 + 3.6;
//a=7
算术类型之间的隐式转换原则是尽量避免损失精度。
显示转换
强制类型转换的四大天王:
1.static_cast
任何具有明确定义的类型转换,只要不包含底层const(所指对象为常量),都可以使用它:
double k = static_cast<double>(j) / i;
//把j转换成double就行了
以下两种情况常用static_cast:
- 把一个较大的算术类型赋值给较小的类型,我们用static_cast相当于告诉编译器,我们不在乎精度损失。
- static_cast对于编译器无法自动执行的类型转换也很有用。
例子:使用static_cast将其强制转换回原来的类型。
void* p = &d;
//任何非常量对象的地址都能存入void*。
double *dp = static_cast<double*>(p);
//转换回来,成为double*。
2.const_cast
作用只有一个,去除底层const,而且你只能用它来去除:
const char *pc;
//pc指向const char,是底层const。
char *p = const_cast<char*>(pc);
//p是char*,去除了底层const。
3.reinterpret_cast
建议不用,也用不着,就不讲了。
4.旧式强制类型转换
要用到的时候去查一下就好了。
int *pi;
char *pc = (char*) pi;