通過以下經驗法則喜歡一切之前static_cast
或dynamic_cast
,我寫了下面的程序:爲什麼這是一個錯誤:的static_cast <unsigned*>(I)
int main(void)
{
int i = 0;
unsigned *j = static_cast<unsigned*>(&i);
return 0;
}
然而,它甚至不編譯:
$ g++ --std=c++11 test5.cpp
test5.cpp: In function ‘int main()’:
test5.cpp:4:44: error: invalid static_cast from type ‘int*’ to type ‘unsigned int*’
unsigned *j = static_cast<unsigned*>(&i);
^
爲什麼這是錯的?這種情況的正確表演是什麼?
您需要'reinterpret_cast'。 – kennytm
它也不會用'dynamic_cast'編譯,所以整個前提是有點欺騙性的。 –
@kennytm,這就是我想要避免的 - 'reinterpret_cast'和'(unsigned *)'是邪惡的,我嘗試僅將它們用作最後的手段。我並不期望需要他們來完成這樣一項微不足道的任務。 – Vorac