首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 操作系统 >

boost跨平台C++整数部类 之一 固定宽度整数

2014-07-02 
boost跨平台C++整数类型 之一 固定宽度整数原来一直使用ACE的跨平台整数类型,比如:ACE_UINT32, 但是自己使

boost跨平台C++整数类型 之一 固定宽度整数

原来一直使用ACE的跨平台整数类型,比如:ACE_UINT32, 但是自己使用C++的风格是明显的现代风格,以范型为主,所以最近开始逐步替换ACE的代码,改用boost库。

在boost库中,standard integer types用来支持跨平台的整数类型,我用的是1.48版本,参考文档:

http://www.boost.org/doc/libs/1_48_0/libs/integer/doc/html/boost_integer/cstdint.html

boost库的整数实现基于99 C标准,不选98C++标准为基础是因为有些情况下的未定义行为。将来新的C++标准如果规定了跨平台整数类型的话,boost的这个库可能被废除。不过现在C++11还没有编译器完全支持,也没有太多选择。

自己实现固然可以,不过意味着分发困难和很多测试,看明白boost如何实现的就可以了。没必要自己干这胀活吧。

注意,总是使用boost::开头的类型和模板,不要直接使用boost引入的C的标准类型和宏。

现在开始。

boost提供了精确宽度的整数类型,采用int#_t 命名,#就是位数,比如int8_t 代表有符号的8位整数。那么它的真实对应物是什么?

注意,我这里是Ubuntu 64bit, GCC4.6.3, boost 1.48.0

/* Unsigned.  */typedef unsigned charuint8_t;typedef unsigned short intuint16_t;#ifndef __uint32_t_definedtypedef unsigned intuint32_t;# define __uint32_t_defined#endif#if __WORDSIZE == 64typedef unsigned long intuint64_t;#else__extension__typedef unsigned long long intuint64_t;#endif






热点排行