C里面的类型转换比较宽松,随意。
C++提供了四个运算符来进行类型转换。
除了常量转换和底层的转换,其他都可以使用static_cast
。
int i = 3;
int j = 2;
double d = static_cast<double>(i) / j;
只能改变变量的只读限制
const int v = 10;
const char *p = &v;
int* q = const_cast<char *>(p);
底层bit的转换。
int c = 'a';
int *p = &c;
char *q = reinterpret_cast<char *>(p);
std::cout << *q << std::endl;
继承关系上的转换, 若不存在严格的继承转换关系就会报错。
class A {};
class B :public A{};
class C :B{};
class E{};
class D:public E{};
B b;
C c;
E e;
D d;
if ( dynamic_cast<A *>(&b) == nullptr)
{
}
if ( dynamic_cast<E *>(&d) == nullptr)
{
}