您想要的代码是:
#if (typeid(std::uint32_t) == typeid(unsigned long))
typedef unsigned long Integer32;
#else
typedef std::uint32_t Integer32;
这不合法,但你想说的是,换句话说,“如果uint32_t
意味着unsigned long
,那么Integer32
意味着unsigned long
。否则,它意味着任何uint32_t
手段”。
这相当于:
typedef std::uint32_t Integer32;
因为在这两种情况下,您都使用别名Integer32
来表示相同的类型uint32_t
。所以就这么写吧。
保证它uint32_t
是符合实现的无符号 32 位类型。由于它不在unsigned long
您的实施中,因此几乎可以肯定unsigned int
. 这两种类型unsigned long
和unsigned int
是不同的类型,即使它们的大小相同。相比之下,uint32_t
是一个 typedef,所以它与 typedef 所指的任何类型都是相同的。
要回答您的新问题:
typedef unsigned short Integer16;
unsigned short
可能不完全是 16 位(尽管它不是很多实现)。如果您想要一个精确的 16 位无符号类型,那么这就是uint16_t
目的。它是一种可选类型,因此在没有合适类型的实现上,您的代码将导致信息错误,这几乎可以做到。
typedef std::uint32_t Integer32;
好的,警告uint32_t
是可选类型。如果你喜欢这个名字Integer32
,那么你可以自由使用它。
typedef unsigned int FastInteger16;
如果您想要一个至少 16 位的快速无符号整数,请使用std::uint_fast16_t
而不是。unsigned int
typedef unsigned long FastInteger32;
如果您想要一个至少 32 位的快速无符号整数,请使用std::uint_fast32_t
而不是。unsigned long