C++的显示转换
C风格的转换只是在括号中指定目标类型。标准的C++包括一个显式的转化语法:
static_cast: 用于“良性”和“适度良性”转换,包括不用强制转换(例如自动类型转换)
const_cast: 对const和/或volatile进行转换
reinterpret_cast: 转换为完全不同的意思。这是所有的转换中最危险的
dynamic_cast: 用于类型安全的向下转换
static_cast:
// Typical castless conversions: l=i; f=i; // Also works: l=static_cast<long>(i); f=static_cast<float>(i); // Forcing a conversion from void* void* vp=&i; // Old way produces a dangerous conversion: float* fp=(float*)vp; // The new way is equally dangerous: fp=static_cast<float*>(vp);
const_cast:
如果从const转换为非const或者从volatile转换成非volatile,可以使用const_cast
const int ci=0; int* j=(int*)&ci; j=const_cast<int*>(&ci); // Error // long* lp=const_cast<long*>(&ci); volatile int k=0; int* u=const_cast<int*>(&k);
reinterpret_cast:
这是最不安全的转换机制。reinterpret_cast把对象假想为模式,仿佛它是一种完全不同类型的对象。