Static_cast整数地址到指针

时间:2014-09-18 00:38:56

标签: c++ casting

为什么你需要进行以下C风格的演员表?

int* ptr = static_cast<int*>(0xff); // error: invalid static_cast from type 'int' 
                                    // to type 'int*'
int* ptr = (int*) 0xff; // ok.

2 个答案:

答案 0 :(得分:13)

static_cast只能投放两种相关类型。整数与指针无关,反之亦然,因此您需要使用reinterpret_cast,它告诉编译器重新解释整数的位,就像它们是指针一样(和反之亦然):

int* ptr = reinterpret_cast<int*>(0xff);

阅读以下内容以获取更多详细信息:

Type conversions

答案 1 :(得分:2)

在将整数转换为指针时,您需要进行C风格的转换或直接使用reinterpret_cast,因为标准对于不相关的类型都是如此。

标准要求那些演员,因为

  1. 你正在做一些危险的事情。
  2. 你正在做一些很少有用的事情。
  3. 你正在做一些高度依赖于实现的事情。
  4. 大多数情况下,这只是编程错误。
  5. When should static_cast, dynamic_cast, const_cast and reinterpret_cast be used?
    Regular cast vs. static_cast vs. dynamic_cast