2012-10-08 186 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'來改變指針類型。編輯。 –