程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> reinterpret_cast在編程中的應用

reinterpret_cast在編程中的應用

編輯:C++入門知識

在某些情況下,為了適應接口類型要求,需要將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,最終結果會出錯。    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved