您想要的代码是:
#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