我正在閱讀一本C++書籍,並且遇到了靜態轉換的問題。這裏是一個函數:C++中的類型轉換
void fun(int*pi)
{
void *pv = pi
int *pi2 = static_cast<int*>(pv); //explicit conversion back to int*
double *pd3 = static_cast<double*>(pv); //unsafe
}
最後一條語句:
double*pd3 = static_cast<double*>(pv);
被認爲是不安全的。我不明白爲什麼它被認爲是不安全的。
因爲你告訴編譯器有一個'pv'指向的'double'對象,而事實上並沒有。 – 2013-12-22 18:10:43
因爲用於int的存儲大大小於double的存儲。你最終可能會使用錯誤的數據,或者甚至覆蓋變量來跟隨/在任何pi指向的前面。 – cup
提示:'int'和'double'不是同一個東西,它們不一定佔據相同的空間。 – Shoe