2013-04-04 31 views
19

C++標準是否可以保證(通過明確說明或通過邏輯推理隱含)std::uintmax_t可以保存所有值std::size_tC++標準確保std :: uintmax_t可以保存std :: size_t的所有值嗎?

或者std::numeric_limits<std::size_t>::max()可能大於std::numeric_limits<std::uintmax_t>::max()

+0

我敢肯定........... – David 2013-04-04 23:05:48

+0

舊版本的GCC,'的std :: size_t'是(錯誤地)簽署。所以:並非總是如此,但它仍然會映射到一個獨特的值,所以您可以無後顧之憂。更可能的是'size_t'短於'uintmax_t' – Dave 2013-04-04 23:07:17

回答

27

是的。

size_t被定義爲一個大小足以包含任何對象大小的無符號整數類型。 uintmax_t被定義爲能夠存儲任何無符號整數類型的值。所以如果size_t可以存儲它,uintmax_t可以存儲它。從C++ 11第18.2節的size_t

定義:

類型size_t實現定義無符號整型,其足夠大以包含任何對象的字節大小。

uintmax_t從C99定義§7.18.1.5(它包括在C++通過標準參考):

下列類型指定能夠表示任何無符號整數的任意值 的無符號整數型類型:

uintmax_t 
+6

正確。通過*定義*,'uintmax_t'是*最大*無符號整數類型,'size_t'是* an *無符號整數類型 - 通過推導,我們可以說'uintmax_t' *必須*能夠保存所有' size_t'。 – Xeo 2013-04-04 23:09:31

+0

有人可以爲我找到'uintmax_t'定義的C99節號嗎?我沒有我的副本。謝謝。 – 2013-04-04 23:11:33

+4

C99中的第7.18.1.5節(C2011中的7.20.1.5)。 – 2013-04-04 23:19:14

相關問題