繁体   English   中英

<stdint.h>还是标准类型?

[英]<stdint.h> or standard types?

在Linux上进行C ++编程时应该使用哪些类型? 使用stdint.h类型(例如int16_tuint8_t是个好主意吗?

一方面,肯定无法在Windows上使用stdint.h进行编程。 但是,另一方面, short眼的大小在第一批眼睛上还不清楚。 而且,编写int8_t而不是char甚至更加直观。

C ++标准是否保证标准类型的大小将来不会改变?

首先,Microsoft的实现确实支持 <stdint.h>

为您的工作使用适当的类型。

例如,如果您需要一个正好16位宽且没有填充位的无符号类型,请使用在<stdint.h>定义的uint16_t

如果需要宽度至少为 16位的无符号类型,则可以使用uint_least16_tuint_fast16_tshortint

您可能不需要像您想的那样经常使用精确宽度类型。 通常,重要的不是类型的确切大小,而是它支持的值的范围。 但是,当您连接某些外部定义的数据格式时,精确的表示很重要。 在这种情况下,您应该已经有声明,告诉您要使用的类型。

对预定义类型的范围有特定要求: char至少为8位, shortint至少为16位, long至少为32位, long long至少为64位。 另外, short至少与char一样宽, int至少与short一样宽,依此类推。 (标准指定了最小范围,但是最小大小可以从范围和需要二进制表示的事实中得出。)

请注意, <stdint.h>是C头。 如果您#include它在C ++程序中,则类型名称将直接导入到全局名称空间中,并且可能会可能不会导入到std名称空间中。 如果您#include <cstdint> ,则类型名称将被导入到std名称空间中,并且可能会可能不会被导入到全局名称空间中。 宏名称(例如UINT32_MAX不在任何名称空间中; 他们始终是全球性的。 您可以使用任何版本的标题; 只是在使用或不使用std::前缀方面保持一致。

C ++标准对整数类型(例如intlongchar )的大小没有太多规定。 如果要确定某个类型在各个平台上的大小是固定的,则可以使用C ++ 11的“ 固定宽度整数”类型 ,这些类型是标准化的并且保证具有给定的大小。

要使用它们,请#include <cstdint>

C ++标准是否保证标准类型的大小将来不会改变?

不见得。 在8位计算机上,整数类型的大小不同于今天的大小。 将来,在2042年,对于1024位计算机 ,我假设long long为1024位。

但是,我们几乎可以完全确定, std::uint32_t将保持32位长。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM