web-dev-qa-db-de.com

sollte size_t oder ssize_t verwenden

In meinem Code verwende ich weder int noch unsigned int. Ich benutze nur size_t oder ssize_t für portable. Beispielsweise:

typedef size_t intc;    // (instead of unsigned int)
typedef ssize_t uintc;  // (instead of int)

Weil strlen, string, vector... alle size_t Verwenden, verwende ich normalerweise size_t. Und ich benutze ssize_t Nur, wenn es negativ sein kann.

Aber ich finde das:

Die vorzeichenlosen Integer-Typen sind ideal für Verwendungen, bei denen der Speicher als Bit-Array behandelt wird. Es ist fast nie eine gute Idee, ein vorzeichenloses statt eines int zu verwenden, um ein weiteres Bit zur Darstellung positiver Ganzzahlen zu erhalten. Versuche, sicherzustellen, dass einige Werte positiv sind, indem vorzeichenlose Variablen deklariert werden, werden in der Regel durch die impliziten Konvertierungsregeln verhindert.

im Buch Die C++ - Programmiersprache .

Also bin ich verwirrt. Liege ich falsch? Warum hält sich die STL nicht an den Vorschlag des Buches?

74
hgyxbll

ssize_t Wird für Funktionen verwendet, deren Rückgabewert entweder eine gültige Größe oder ein negativer Wert sein kann, um einen Fehler anzuzeigen. Es ist garantiert, dass Werte mindestens im Bereich [-1, SSIZE_MAX] Gespeichert werden können (SSIZE_MAX Ist systemabhängig).

Verwenden Sie also size_t, Wenn Sie eine Größe in Bytes zurückgeben möchten, und ssize_t, Wenn Sie entweder eine Größe in Bytes oder einen (negativen) Fehlerwert zurückgeben möchten.

Siehe: http://pubs.opengroup.org/onlinepubs/007908775/xsh/systypes.h.html

123
maditya

ssize_t ist nicht im Standard enthalten und nicht portabel. size_t sollte verwendet werden, wenn die Größe von Objekten behandelt wird (es gibt ptrdiff_t auch für Zeigerunterschiede).

27
user657267