来自ISO/IEC 9899:
7.18.1.2最小宽度整数类型
1 typedef名称int_leastN_t指定宽度至少为N的有符号整数类型,这样没有较小大小的有符号整数类型至少具有指定的宽度.因此,int_least32_t表示宽度至少为32位的有符号整数类型.
为什么我应该使用这种类型?
当我决定采用哪种类型来获取我需要的变量时,我会问自己:"它能携带的最大价值是什么?"
所以我将找到一个答案,检查哪个是最大的2 n,哪个大于那个,并采用匹配的精确整数类型.
所以在这种情况下我也可以使用最小宽度整数类型.但为什么?正如我已经知道的那样:它永远不会是一个更大的价值.那么为什么要采取有时可以覆盖的东西呢?
所有其他情况我可以想象哪里甚至无效的ie:
"我的类型至少是......的大小......" - 这个实现无法知道我将获得的最大(例如)用户输入是什么,因此在编译时调整类型将无济于事.
"我有一个变量,我无法确定它将在运行时保持的值大小."
- 编译器在编译时如何知道? - >它也找不到拟合字节大小.
那么这些类型的用途是什么?
那么为什么要采取有时可以覆盖的东西呢?
因为可能并不总是你需要的尺寸.例如,在系统中CHAR_BIT > 8,int8_t不可用,但是int_least8_t.
想法不是编译器会猜测你需要多少比特.想法是编译器将始终具有可满足您的大小要求的类型,即使它不能提供确切的大小类型.
因为您的编译器最了解什么对您有好处.例如,在某些CPU架构上,由于屏蔽操作数和结果匹配宽度的额外指令,涉及8或16位类型的计算可能比32位完成的计算慢得多.
例如,Cray Unicos上的C实现只有8位char类型,其他所有(short,int,long,long long)都是64位.如果您强制使用某种类型,int16_t或者int32_t由于狭窄的商店需要屏蔽,oring和anding,性能会受到严重影响.使用int_least32_t将允许编译器使用本机64位类型.