不使用#if
,stdint.h
,inttypes.h
或特定于编译器的扩展(非标准内部类型除外),而是免费使用所有其他C ++功能(包括C ++)例如11 type_traits
是否可以编写具有
typedef {some implementation-specific type} int_least64;
当且仅当有特定于实现的类型提供至少64位精度,否则会产生编译时错误?
构造应检测可能具有所需属性的非标准内在类型(例如,MSVC ++上的__int64
)以及标准属性(long
,long long
)。如果有几种类型符合要求,则应选择符合条件的最小类型。理想情况下,可以推广使用enable_if
以及错误输出,并检测任意大整数(例如,某些编译器现在提供__int128
)。
答案 0 :(得分:2)
这是将cstdint
添加到C ++以及C99兼容性的动机的一部分。
答案 1 :(得分:0)
如果问题是MSVC和<cstdint>
,请至少升级到MSVS2010或自己为Windows编写。这并不难。
您可以使用一些模板技巧,但它仍然需要long long
起来(以及)64位整数。
我是从SO C ++休息室的一个人那里得到的(即@StackedCrooked):
https://github.com/rubenvb/KISS/blob/master/include/types.hxx#L47