在某些情況下,為了適應接口類型要求,需要將int轉化成uint, double轉化成int64_t等,但是經過這種轉化之後可能會有數據損失。 如果只是為了適應接口,最終還是希望讀出原始數據,那麼可以選用reinterpret_cast。例如: [cpp] #include <stdio.h> #include <stdint.h> int main() { int64_t i = 0; double d = 1.1; int64_t j = reinterpret_cast<int64_t&>(d); double j2 = reinterpret_cast<double&>(j); int64_t k = static_cast<int64_t>(d); double k2 = static_cast<double>(k); printf("org=%lf, reintterpret forw(double=>int64_t)=%ld\t, reintterpret back(int64_t=>double)=%lf\n", d, j, j2); printf("org=%lf, static forw(double=>int64_t)=%ld\t, static back(int64_t=>double)=%lf\n", d, k, k2); } 編譯後的輸出結果: [sql] [xiaochu.yh@tfs035040 cpp]$ ./a.out org=1.100000, reintterpret forw(double=>int64_t)=4607632778762754458 , reintterpret back(int64_t=>double)=1.100000 org=1.100000, static forw(double=>int64_t)=1 , static back(int64_t=>double)=1.000000 可以看到,使用了static_cast之後精度數據被丟失了。而reinterpret_cast是一種二進制轉化,並不關心數據的語義。 使用reinterpret的時候需要注意的是存儲空間需要足夠,如果將double轉成int32_t,最終結果會出錯。