你想要的代碼是:
#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
。手段」。
這相當於:因爲你是走樣Integer32
這兩種情況下
typedef std::uint32_t Integer32;
意味着同一類型uint32_t
手段。所以就寫這個吧。
確保uint32_t
是符合實現的無符號32位類型。由於您的實施不是unsigned long
,因此幾乎肯定是unsigned int
。即使它們的尺寸相同,這兩種類型即unsigned long
和unsigned int
也是不同的類型。相比之下,uint32_t
是一個typedef,因此它與typedefed的含義相同。
要回答你的新問題:
typedef unsigned short Integer16;
unsigned short
可能不會恰好是16位(雖然沒有很多的實現,取決於它是不是)。如果你想要一個精確的16位無符號類型,那麼這就是uint16_t
的用途。這是一種可選類型,所以在沒有合適類型的實現中,您的代碼會導致信息錯誤,這幾乎與您所能做的一樣。
typedef std::uint32_t Integer32;
好的,警告uint32_t
是一個可選類型。如果你喜歡Integer32
那麼你可以自由使用它。
typedef unsigned int FastInteger16;
使用std::uint_fast16_t
而不是unsigned int
如果你想至少爲16位的快速無符號整數。
typedef unsigned long FastInteger32;
使用std::uint_fast32_t
而不是unsigned long
如果你想至少32位的快速無符號整數。
'sizeof()'報告兩種類型的是什麼? – cdhowie
4對unsigned long和std :: uint32_t ... –
@RyanBrown:所以'uint32_t'是一個32位的類型,因爲它應該是。有什麼問題? –