static_cast<>揭密
2007-03-15 21:54:22 来源:WEB开发网核心提示:本文讨论static_cast<> 和 reinterpret_cast<>,介绍大多程序员在学C++前都学过C,static_cast<>揭密,并且习惯于C风格(类型)转换,当写C++(程序)时,如float-到-integer,而reinterpret_cast<>简
本文讨论static_cast<> 和 reinterpret_cast<>。
介绍
大多程序员在学C++前都学过C,并且习惯于C风格(类型)转换。当写C++(程序)时,有时候我们在使用static_cast<>和reinterpret_cast<>时可能会有点模糊。在本文中,我将说明static_cast<>实际上做了什么,并且指出一些将会导致错误的情况。
泛型(Generic Types)
float f = 12.3;
float* pf = &f;
// static cast<>
// 成功编译, n = 12
int n = static_cast<int>(f);
// 错误,指向的类型是无关的(译注:即指针变量pf是float类型,现在要被转换为int类型)
//int* pn = static_cast<int*>(pf);
//成功编译
void* pv = static_cast<void*>(pf);
//成功编译, 但是 *pn2是无意义的内存(rubbish)
int* pn2 = static_cast<int*>(pv);
// reinterpret_cast<>
//错误,编译器知道你应该调用static_cast<>
//int i = reinterpret_cast<int>(f);
//成功编译, 但是 *pn 实际上是无意义的内存,和 *pn2一样
int* pi = reinterpret_cast<int*>(pf);
简而言之,static_cast<> 将尝试转换,举例来说,如float-到-integer,而reinterpret_cast<>简单改变编译器的意图重新考虑那个对象作为另一类型。指针类型(Pointer Types)
指针转换有点复杂,我们将在本文的剩余部分使用下面的类:
更多精彩
赞助商链接