隐式类型转换
int m = 3 + 45.6;
double n = 3 + 45.6;
显式类型转换
也叫强制类型转换
int k = 5 % (int)3.2;
int k = 5 % int(3.2);
c++中,强制类型转换分为4中,4中类型转换用于不同的目的,C++中为了提供更好的类型检查机制, 方便代码书写和维护.
C++写法
static_cast
静态转化 可以理解为"正常转换" ,编译时候就会进行类型转换的检查, 代码中要保证转换的安全性和正确性, static_cast含义跟C语言中的强制类型转换差不多,下面是例子
double f = 100.34f;
int i = (int)f;
int i = static_cast<int>(f);
class A {};
class B : public A {};
B b;
A a = static_cast<A>(b);
int i = 10;
int* p = &i;
void* q = static_cast<void*>(p);
int* db = static_cast<int*>(q);
不能转的情况
double f = 100.0f;
double* pf = &f;
dynamic_cast
主要应用于运行时类型识别和检查,这里与static_cast不同的地方就是static_cast是编译时检查 主要用来父类型和子类型之间转换用 后续在类中补充…
const_cast
去除指针 或者 引用的const属性, 改转换能够将const性质转换掉 编译时进行类型转化
const int a = 90;
const int* pai = &a;
int* b = const_cast<int*> (pai);
*b = 120;
reinterpret_cast
编译时进行类型转化 reinterpret:重新解释 将操作数内容解释为另一种不同的类型,处理无关类型转换,等于说可以乱转,很随意 一般常用语如下 1.整型(地址)转指针 按照转换后内容重新解释内存中的内容; 2.指针类型转整型
int i = 10;
int* p1 = &i;
int* p2 = reinterpret_cast<int*> (&i);
char* pc = reinterpret_cast<char*>(p1);
功能强大,但是是一种危险的类型转换,随便乱转也并无意义
总结
(1)强制类型转换,不建议使用,强制类型转换能够抑制编译器报错 (2)reinterpret_cast很危险,使用const_cast意味着设计缺陷 (3)不要使用c语言风格类型转换,建议使用c++风格
|