我一直在学习C ++,我不太满意的一件事是数据类型大小不一致。取决于在int上部署的内容可以是16位或32位等等。
所以我认为用数据类型(如字节,单词等)创建自己的头文件可能是一个好主意,这些数据类型被定义为特定大小,并将在任何平台上保持该大小。
两个问题。首先这是个好主意吗?或者是否会产生其他我不知道的问题?其次,如何将类型定义为8位?我不能只说#define BYTE char,因为char会因平台而异。
答案 0 :(得分:3)
幸运的是,其他人也注意到了同样的问题。在C99和C ++ 11中(因此将编译器设置为与这两种模式之一兼容,编译器设置中应该有一个开关),它们添加了头文件stdint.h(用于C)和cstdint(用于C ++)。如果你#include <cstdint>
,你得到类型int8_t,int16_t,int32_t,int64_t,并且对于无符号版本,前缀为u。如果您的平台支持这些类型,它们将在标题中与其他几个类型一起定义。
如果您的编译器尚未支持该标准(或者您因为无法控制的原因而被迫继续使用C ++ 03),那么还有Boost。
但是,如果您完全关心类型的大小,则应该只使用它。在大多数情况下,int
和unsigned
适用于丢弃变量。 size_t
应该用于索引std::vector
等。
答案 1 :(得分:1)
答案 2 :(得分:1)
首先,您需要弄清楚您是否真正关心的是什么尺寸。如果你使用int来计算文件中的行数,你真的关心它是32位还是64位?如果您正在处理打包的二进制数据,则需要BYTE,WORD等,但通常不会出于任何其他原因。所以你可能会担心一些无关紧要的事情。
答案 3 :(得分:0)
许多库都有自己的.h,其中包含大量的typedef以具有常量大小类型。这在制作可移植代码时很有用,并且避免依赖于您当前使用的平台的标题。
答案 4 :(得分:0)
如果您只想确保内置数据类型具有最小大小,可以使用标题中的std :: numeric_limits进行检查。
std::numeric_limits<int>::digits
例如,将给出没有符号位的int的位数。和
std::numeric_limits<int>::max()
会给你最大值。