2012-10-08 140 views
0

我想将const unsigned int*数组转换为int*数组。然而, static_castconst_cast失败。如何将const unsigned int数组转换为int数组

const unsigned int* getArray() 
{ 
    static unsigned int a[3]; 
    a[0] = 0; 
    a[1] = 1; 
    a[2] = 2; 
    return a; 
} 
int main() 
{ 
    const unsigned int * a = getArray(); 
    const_cast<int*>(a); // fail 
    static_cast<int*>(a); // fail 
} 
+0

那是你真正的代码? 'getArray'甚至没有'return'语句。除此之外,返回一个局部变量的地址(就像你打算这样做)是坏消息。 –

+0

@CarlNorum'getArray()'只是将调用替换为我无法控制的更大的库。 - 我同意传递原始指针并不好。 –

+0

传递指针很好。返回指向局部变量的指针不是。为什么不用'static'声明'a'?那么这将是正确的,不会混淆未来的读者。 –

回答

2
  1. const_cast不能改变的类型,只是const湖。
  2. static_cast不能带走const,也不能在这些指针类型之间进行切换。

它看起来像什么你想要的是:

int *b = reinterpret_cast<int *>(const_cast<unsigned int *>(a)); 

你也可以使用C样式转换在这种情况下:

int *b = (int *)a; 
+0

如此连接这两个可能工作?这个'unsigned int * b = const_cast (a);'这个'int * c = static_cast (b);'至少会抛弃'const';'仍然失败。我会修改这个问题。 –

+0

不,你也不能用'static_cast'来改变指针类型。编辑。 –