私のコードでは、intまたはunsigned intは使用していません。ポータブル用にのみsize_tまたはssize_tを使用しています。例えば:
typedef size_t intc; // (instead of unsigned int)
typedef ssize_t uintc; // (instead of int)
strlen
、string
、vector
...はすべてsize_t
を使用するため、通常はsize_t
を使用します。そして、ssize_t
が負の場合にのみ使用します。
しかし、私はそれを見つけます:
符号なし整数型は、ストレージをビット配列として扱う用途に最適です。正の整数を表すためにもう1ビットを得るために、intの代わりに符号なしを使用することは、ほとんどお勧めできません。符号なしの変数を宣言することにより、いくつかの値が正であることを保証する試みは、通常、暗黙の変換規則によって無効にされます。
本の中で C++プログラミング言語 。
だから私は困惑しています。私が間違っている? STLが本の提案に従わないのはなぜですか?
ssize_t
は、戻り値が有効なサイズであるか、エラーを示す負の値である可能性がある関数に使用されます。少なくとも[-1, SSIZE_MAX]
の範囲に値を格納できることが保証されています(SSIZE_MAX
はシステムに依存します)。
したがって、バイト単位のサイズを返す場合は常にsize_t
を使用し、バイト単位のサイズまたは(負の)エラー値を返す場合はssize_t
を使用する必要があります。
参照: http://pubs.opengroup.org/onlinepubs/007908775/xsh/systypes.h.html
ssize_t
は標準に含まれておらず、移植性がありません。オブジェクトのサイズを処理するときは、size_t
を使用する必要があります(ポインターの違いにはptrdiff_t
もあります)。