总结下cast的套路:
TypeA a = xxx_cast<TypeA>(b);
操作符 | 作用 | C++中对应的例子 | C中对应的例子 |
static_cast | 编译器隐式执行的任何类型转换都可以通过它来显式完成. |
double d = 1.1;
char ch = static_cast<char>(d);
|
char ch = d; |
dynamic_cast |
将基类指针或者引用转化为其继承层次中的其他类型的指针或者引用 |
if(Derived *pDerived = dynamic_cast<Derived *>(pBase))//把基类的动态性给cast掉 { //use pDerived } else { //use pBase } |
无 |
const_cast | 去掉类型的const属性 |
const char * pc_str; char * p = const_cast<char *>(pc_str); |
char *p = (char *)pc_str; |
reinterpret_cast | 对类型进行重新解释,通常用于和指针类型有关的转换 |
例子1: Date *pd = new Date(); cout << "address" << reinterpret_cast<int>(pd); //等价于直接打印pd,只不过直接打印是16进制;这里是10进制打印.(还不清楚这样打印有啥好处) 例子2: int *ip; char *pc = reinterpret_cast<char *>(ip); string str(pc); //发生了类型转换,把一个四字节的变量让一个指向一字节的指针给指向了,会存在问题.比如ip指向的数大于255时,pc中得到的值只能是它最低的一个字节的内容.(作者利用str表示的意图没有理解,待以后完善) |
char *pc = (char *)ip; |