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

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

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

/* For GCC 2.7 and later, we can use specific type-size attributes.  */

# define __intN_t(N, MODE) \

typedefintint##N##_t __attribute__ ((__mode__ (MODE)))

# define __u_intN_t(N, MODE) \

typedefunsignedintu_int##N##_t __attribute__ ((__mode__ (MODE)))

# ifndef __int8_t_defined

#  define __int8_t_defined

__intN_t (8, __QI__);

__intN_t (16, __HI__);

__intN_t (32, __SI__);

__intN_t (64, __DI__);

# endif

用宏替换后,其实就是:

typedefintint8_t __attribute__ ((__mode__ (__QI__)))

用到了几个GCC编译器的指令

__attribute__, __mode和 __QI__

##是宏的连接符号。

__QI__就代表最小寻址单元,一个字节,8位。

__HI__ 以及后面的指令都是8位的若干倍数。

至于无符号固定宽度整数类型,前面加上u,形如:uint#_t 就是无符号整数的固定宽度表达方法。

实现采用了另一套typedef,没有用上面的编译器指令

/* Unsigned.  */

typedefunsignedcharuint8_t;

typedefunsignedshortintuint16_t;

#ifndef __uint32_t_defined

typedefunsignedintuint32_t;

# define __uint32_t_defined

#endif

#if __WORDSIZE == 64

typedefunsignedlongintuint64_t;

#else

__extension__

typedefunsignedlonglongintuint64_t;

#endif

更新:2013/9/14

不过今天开始启用C++11,现在有了标准的可用。参考文档:

几乎和boost里面的一样。所以本文标题也有所改变。

boost跨平台 c++_跨平台C++整数类型 之一 固定宽度整数(boost和C++11)相关推荐

  1. mysql int后面的数字_mysql中整数类型后面的数字,比如int(11),11代表11个字节吗?...

    原先对mysql不太理解,但也没有报错.但理解的不够深入.这次补上. 原来以为int(11)是指11个字节,int(10)就是10个字节.我错了. http://zhidao.baidu.com/li ...

  2. mysql 数字占几个字节_mysql中整数类型后面的数字,比如int(11),11代表11个字节吗?...

    原先对mysql不太理解,但也没有报错.但理解的不够深入.这次补上. 原来以为int(11)是指11个字节,int(10)就是10个字节.我错了. http://zhidao.baidu.com/li ...

  3. MySQL中的整数类型

    文章目录 1 MySQL中的整数类型 1.1 整数类型简介 1.2 整数类型的附带属性 1 MySQL中的整数类型 1.1 整数类型简介 整数类型是数据库中最基本的数据类型.标准SQL中支持INTEG ...

  4. 详细讲解Java整数类型

    本专栏由十年Java开发经验专家编写,本专栏定位于Java基础知识,既适合新手入门又适合老鸟巩固基础知识.一共99节课,每节课只需几毛钱. 作者简介:笔名seaboat,擅长工程算法.人工智能算法.自 ...

  5. Swift学习笔记_数据类型_整数类型

    1 整数类型 整数就是没有小数部分的数字. 整数类型分为两种: (1)有符号整数类型:表示负整数.零.和正整数 (2)无符号整数类型:表示零.和正整数 有符号整数类型有5种表示方式: (1)Int8: ...

  6. python整数类型在每一台计算机上的取值范围是一样的_第四章、Python数据类型

    1.前面第三章有说过了Python有的数据类型,在开始介绍各种数据类型之前,我们先要知道Python的一个内置函数 type() ,用以查询变量所赋值的数据类型. >>> a=1 & ...

  7. java两个函数名字相同_为什么C不允许两个具有相同名称的函数/类模板,只有非类型模板参数(整数类型)的类型不同?...

    我尝试这个时编译器会出错 . 我试过VC和g . 这同样适用于函数模板和类模板(但对于函数模板,只有在实例化函数模板时才会出现编译器错误;当编译器遇到第二个类定义时,会立即出现类模板的编译器错误) . ...

  8. 导致溢出_由整数类型溢出导致的英雄联盟峡谷惨案

    最近,英雄联盟迎来了 S11 赛季的版本大更新.作为一名从 S2 一路走过来的老玩家,我自然也是非常的关注.除了发生了巨变的装备系统之外,各种各样的 bug,也是在玩家之间炽手可热的话题.这其中,较为 ...

  9. python中不属于整数类型_哪个选项不是Python语言的整数类型?

    [单选题]下面不属于Python保留字的是: [单选题]关于Python的元组类型,以下选项错误的是: [单选题]关于整数类型的4种进制表示,哪个选项的描述是正确的? [简答题]阅读以下冒泡法排序代码 ...

最新文章

  1. 发现的bug不能重现怎么办?
  2. python创建一个字典、关键字为只包含字母的字符串_探究Python源码,终于弄懂了字符串驻留技术...
  3. Centos 配置mailx使用外部smtp发送邮件
  4. Difference between expressions and statements?
  5. Keras TensorFlow教程:如何从零开发一个复杂深度学习模型
  6. 【HDU - 1026 】Ignatius and the Princess I (bfs + 记录路径)
  7. 小程序 怎么选云服务器,小程序如何选择云服务器
  8. Nginx 500错误总结
  9. java安卓模拟器和电脑通信_Android 模拟器(JAVA)与C++ socket 通讯 分享
  10. 计算机网络学习笔记——操作
  11. 社工手段日益精进,MacOS和IOS系统还安全吗?
  12. linux 深度攻略 pdf,万字深度详细分析 全民主公深度攻略
  13. 加密php大马,webshell加密-加密你的大马
  14. [个人笔记] origin学习 入门教程
  15. 机器视觉学习笔记(6)——双目摄像机标定参数说明
  16. Ubuntu下安装Remix OS双系统
  17. 三子棋?玩我自己的!
  18. Java入门 技术总结
  19. HarmonyOS学习路之HarmonyOS 概述
  20. Python - python安装 - 在线

热门文章

  1. 什么是路由器交换机?路由器交换机介绍!
  2. Memobus总线光端机产品功能介绍
  3. [渝粤教育] 西南科技大学 工程力学 在线考试复习资料
  4. Semtech的LoRa技术实现智能化工业应用管理
  5. appium的python教程_移动App Appium自动化测试教程Appium+Python 【2018年新】_IT教程网...
  6. 对c语言字符数组描述错误的是,下述对C语言字符数组的描述中错误的是( )。
  7. 蓝桥杯基础模块8_1:串口通信收发
  8. android bench内存测试,华为p10内存测试软件(androbench) v5.0.1 免费版
  9. vs2019中如何创建qt项目_在VS2015中创建Qt项目【VS+Qt项目开发系列】(二)
  10. python皮卡丘编程代码_再接再厉,用python编程13行代码解方程组(纯字符)