2013-04-04 13 views
19

std::uintmax_t'un std::size_t tüm değerlerini tutabildiği C++ standardı garantisini (açık bir şekilde ya da dolaylı olarak mantıksal bir kesinti ile belirterek) yapar mı? Veya std::numeric_limits<std::size_t>::max()std::numeric_limits<std::uintmax_t>::max()'dan daha büyük olması mümkün mü?C++ standardı, std :: uintmax_t dosyasının std :: size_t'nin tüm değerlerini tutabileceğini garanti ediyor mu?

+0

........... – David

+0

, 'std :: size_t' olduğu (yanlış olarak) imzalamıştır. Öyleyse: her zaman değil, ama yine de benzersiz bir değerle eşleşir, böylece hiçbir sorun olmadan geri dönebilirsiniz. 'Size_t', 'uintmax_t' – Dave

cevap

27

Evet. Herhangi bir nesnenin boyutunu içerecek kadar büyük işaretsiz bir tamsayı türü olması için tanımlanır. uintmax_t, imzalanmamış tamsayı türünün herhangi bir değerini depolayabilecek şekilde tanımlanmıştır. Yani, size_t onu saklayabilirse, uintmax_t bunu saklayabilir. C++ 11 §18.2 den size_t arasında

Tanım:

tipi size_t herhangi bir nesnenin bayt cinsinden boyutunu içeren büyük olan bir uygulama tanımlı işaretsiz bir tamsayı türüdür. §7.18.1.5 (normatif referans C++ dahildir) C99 den uintmax_t arasında

Tanım:

aşağıdaki tür bir işaretsiz bir tamsayı herhangi bir değeri temsil edebilen bir işaretsiz tamsayı türü belirtmektedir türü: GCC eski sürümlerinde eminim

uintmax_t 
+6

Right'den daha kısadır. By * definition *, 'uintmax_t' * * en büyük * işaretsiz tamsayı türü ve' size_t' * * imzasız bir tamsayı türü olarak - kesinti ile, 'uintmax_t'nın * tüm değerlerini tutabilmesi gerektiğini söyleyebiliriz. size_t'. – Xeo

+0

Birisi benim için 'uintmax_t' tanımının C99 bölüm numarasını bulabilir mi? Bende bir kopyası yok. Teşekkürler. –

+4

C99’da Bölüm 7.18.1.5 (C2011’de 7.20.1.5). –