C++中平臺無關整數類型的表示

 最近寫程序,需要用到平臺無關的32位/64位整數類型,如果直接使用intlong來表示的話,需要考

慮到在32和64位平臺上的差異。

如通常的32位編譯系統中,int的寬度是32位,long也是32位,long long則是64位。

而64位編譯系統中,int的寬度是32位,long是64位了,long long也是64位。

我們當然可以自己來使用typedef定義平臺無關的32,64位整數類型,但如果語言標準裏已經提供了相

應的支持的話,我們就不用重複這部分工作了。

查了一下C99的標準,已經引入了uintXX_t/intxx_t來表示XX位數的無符號/有符號整型數據,如

uint32_t表示無符號32位整數。

int64_t表示有符號64位整數。

C99中還規定,這些平臺無關的整數類型的定義存放在標準庫的stdint.h頭文件裏。

不過現在我們的項目是採用C++語言開發,所以,雖然編譯器向下兼容C,也支持C的標準庫,我

還是希望在代碼中能夠儘可能使用C++風格的元素,於是又查了一下C++標準,結果發現並沒有

uintXX_t/intXX_t這樣的東東,有些沮喪之餘,還是在c++的庫文件路徑下搜索了一下uint32_t

居然發現在一個tr1目錄下有名稱如cstdint這樣的C++庫文件,而且裏面包含了uintXX_t/intXX_t

定義。Google了一下,才知道,cstdint是在C++的TR1技術草案中提出的東西,很可能會包含在將發

布的C++0X語言標準中,下了C++0X的標準草案,看了一下,果然已經有了cstdint這樣的東東。在

TR1技術草案裏還引入了一些新的庫,比如Boost中的RegEx這個處理正則表達式的庫在TR1裏就有包

括。 雖然cstdint目前僅僅是在TR1或是C++0x的標準草案中有提及,但我想cstdint這種基礎性的東

西,正如C++標準中已有的cstdiocstdargcstring一樣,是爲了提供對C99 的後向兼容性,對

語言的核心不會帶來大的影響,被棄之不用的可能性不大。它不像RegEx這種函數庫,如果設計得有些缺

陷的話,一但引入,可能會導致C++語言陷入一種不可控的混亂狀態中。所以最終,我還是在程序中直

接使用了這個目前還屬於草案特性的東東來協助自己開發項目。

另外值得一提的是,g++4.0.1以後的版本,以及VS2008的最新版本都已經提供了對 TR1的部分甚至完

整支持。這些大的編譯器社團或廠商對TR1的認同多少能夠讓我們看到TR1的光明前景了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章