星期二, 2月 10, 2009

小常識

最近亂想的時候,發現自己以前寫的程式碼不夠好。
如果我想寫入binary file,可能會這樣子寫

boost::array<unsigned int, 512> data;
std::ofstream outfile(filename.c_str(), std::ofstream::out | std::ofstream::binary);
outfile.write(static_cast<char*>(static_cast<void*>(data.c_array())), sizeof(unsigned int)*data.size());
其實寫入的那行,寫成
outfile.write(reinterpret_cast<char*>(data.c_array()), sizeof(unsigned int)*data.size());
至於為什麼,我不想多講,我只是想證明我沒看書而己...Orz

---
看了也要記得啊...Orz

2 則留言:

Unknown 提到...

呣,其實不相干的指標轉型的確是建議先轉成void*再轉成其他類型
reinterpret_cast 由於有破壞型別系統+編譯器實作不同的特性,一般建議是能免則免

yen3 提到...

顯然是我太粗枝大葉了,謝謝你的指正:)。