2013-04-04 5 views
19

Gewährleistet der C++ - Standard (entweder durch ausdrückliche Angabe oder implizit durch logische Ableitung), dass std::uintmax_t alle Werte von std::size_t enthalten kann?Gewährleistet der C++ - Standard, dass std :: uintmax_t alle Werte von std :: size_t enthalten kann?

Oder ist es möglich, dass std::numeric_limits<std::size_t>::max() größer als std::numeric_limits<std::uintmax_t>::max() ist?

+0

ich bin sicher, dass ........... – David

+0

in alten Versionen von GCC, 'std :: size_t' ist (zu Unrecht) unterzeichnet. Also: nicht immer, aber es würde immer noch zu einem einzigartigen Wert zugeordnet, so dass Sie ohne Problem hin und her gehen können. Wahrscheinlicher ist, dass 'size_t' kürzer ist als 'uintmax_t' – Dave

Antwort

27

Ja.

size_t ist als vorzeichenloser Integer-Typ definiert, der groß genug ist, um die Größe eines Objekts zu enthalten. uintmax_t ist definiert, um einen beliebigen Wert eines vorzeichenlosen Integertyps speichern zu können. Wenn size_t es speichern kann, kann uintmax_t es speichern.

Definition von size_t von C++ 11 §18.2:

Der Typ size_t ist eine Implementierung definiert unsigned integer Typ, der groß genug ist, um die Größe in Bytes eines beliebigen Objekts zu enthalten.

Definition von uintmax_t von C99 §7.18.1.5 (es ist in C++ durch normative Bezugnahme eingeschlossen ist):

folgenden Typs bezeichnet eine ganze Zahl ohne Vorzeichen Typ fähig jeden Wert von repräsentiere jeder unsigned integer Typ:

uintmax_t 
+6

Right. Mit * definition * ist 'uintmax_t' * der größte * vorzeichenlose Integer-Typ und' size_t' als * an * unsigned Integer-Typ - durch Abzug können wir sagen, dass 'uintmax_t' * * in der Lage sein muss, alle Werte von 'zu enthalten size_t'. – Xeo

+0

Könnte jemand die C99 Abschnittsnummer für diese 'uintmax_t' Definition für mich finden? Ich habe keine Kopie bei mir. Vielen Dank. –

+4

Abschnitt 7.18.1.5 in C99 (7.20.1.5 in C2011). –

Verwandte Themen