reinterpret_cast static_cast 区别
精选 转载reinterpret_cast允许任何类型的指针转换到别的任何类型的指针,不×××全,要小心使用。
#include <iostream>
unsigned short Hash(void *p)
//Returns a hash code based on an address
{
unsigned int val = reinterpret_cast<unsigned int>(p);
return (unsigned short)(val ^ (val >> 16));
}
using namespace std;
int main()
{
int a[20];
for(int i = 0; i < 20; i++)
cout << Hash(a + i) << endl;
}
static_cast是静态的,没有运行时的类型检查,而dynamic_cast有运行时的类型检查,static_cast不安全,一般少用,用的时候自己必须想清楚是否安全!这两个主要是对对象指针和引用的转换
class B{ ...};
class D : public B{ ... };
void f(B* pb, D* pd)
{
D* pd2 = static_cast<D*>(pb); // not safe, pb may
//point to just B
B* pb2 = static_cast<B*>(pd); // safe conversion
...
}
static_cast
用于数字之间的转换,如int a = static_cast<int>(0.5f);等
用于类层次之间的转换,即只能用于从父类指针向子类指针转换,不可在同一继承层次中的类的指针之间互相转换。
static_cast是静态转换,编译时刻进行转换,并进行正确的对象布局(比如虚函数表的位置)。比如CC派生自CA和CB,而如下:
CC c;
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
stub 和totally stub区别
stub与totally stub
ci Standard Time -
static_cast和reinterpret_cast揭秘 收藏
# static_cast和reinterpret_cast揭秘 # 本文讨论static_cast<> 和 reinterpret_cast<>。 # # reinterpret_cast可以转换任意一个32bit整数,
职场 休闲 static_cast<> reinterpret_cast< dynamic_cast<> -
static_cast、dynamic_cast、reinterpret_cast和const_cast的区别与比较
关于强制类型转换的问题,很多书都讨论过,写的最
c++ 运算符 空指针 虚函数表 虚函数