Ist std::streampos garantiert unsigned long long?
Ist std::streampos
garantiert unsigned long long
?
Wenn dem nicht so ist, wie funktioniert std::istream::seekg
korrekt auf Dateien größer als 4G?
InformationsquelleAutor xmllmx | 2014-06-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vom http://en.cppreference.com/w/cpp/io/fpos:
std::streampos
ist eine Spezialisierung der Klasse Vorlagestd::streampos
ist typedef ' ed zu werdenstd::fpos<std::char_traits<char>::state_type>
Jedes Objekt vom Typ
fpos
hält die byte-position im Strom (in der Regel als private-member des Typsstd::streamoff
).Vom http://en.cppreference.com/w/cpp/io/streamoff:
Art
std::streamoff
ist eine vorzeichenbehaftete Integrale Typ, der in ausreichender Größe zur Darstellung der maximal möglichen Dateigröße vom Betriebssystem unterstützt. In der Regel ist dies ein typedef zulong long
.Ihre Fragen zu beantworten...
Frage Ist
std::streampos
garantiertunsigned long long
?Antwort ich bin sicher, dass Sie gedacht, um herauszufinden, ob die zugrunde liegenden ganzzahligen Typ, hält die position ist garantiert
unsigned long long
. In diesem Sinne, die eigentliche Frage ist, obstd::streamoff
ist gueranteed zuunsigned long long
. Die Antwort auf diese Frage ist "Nein", wie Sie folgern aus der obigen Beschreibungen.Frage Wenn dem nicht so ist, wie funktioniert
std::istream::seekg
korrekt auf Dateien größer als 4G?Antwort, Wenn ein Betriebs-system unterstützt das arbeiten mit Dateien größer als 4G, es ist
std::streamoff
ist typdef ' ed entsprechend. Selbst dann ist es wahrscheinlich gehen, um ein signiertes integral-Typ. Hier ist ein weiteres Zitat aus http://en.cppreference.com/w/cpp/io/streamoff.streamoff
ist definitiv unterzeichnet. Können Sie erklären, der Sprung von dort zu machenstreampos
auch unterzeichnet?Das war ein Tippfehler. Vielen Dank für bemerken und ließ mich wissen 🙂
InformationsquelleAutor R Sahu
Nein, es ist nicht garantiert
unsigned long long
.Insbesondere bei älteren Compilern, es funktioniert möglicherweise nicht mit Dateien größer als 4 GB sind (und in einigen Fällen, es wurde unterschrieben, so dass es funktioniert nur mit Dateien bis zu 2 GB-aber wenn typische Festplatten wurden 20 bis 40 Megabyte, wahrscheinlich, dass nicht, wie offenbar eine wichtige überlegung).
std::streampos
unterzeichnet werden?Ich denke, es kann nur unterzeichnet werden, in der pre-Standard iostreams
Wahrscheinlich.
InformationsquelleAutor Jerry Coffin