108

私のコードでは、int または unsigned int を使用していません。ポータブルには size_t または ssize_t のみを使用します。例えば:

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

なぜなら・・・全部使うstrlenので普段は使ってstringます。そして、それがマイナスになる可能性がある場合にのみ使用します。vectorsize_tsize_tssize_t

しかし、私はそれを見つけます:

符号なし整数型は、ストレージをビット配列として扱う用途に最適です。int の代わりに unsigned を使用して、正の整数を表すビットをもう 1 つ取得することは、ほとんど良い考えではありません。符号なしの変数を宣言することによって一部の値が正であることを保証しようとする試みは、通常、暗黙的な変換規則によって無効になります。

The C++ Programming Languageという本の中で。

だから私は困惑しています。私が間違っている?STL が本の提案に従わないのはなぜですか?

4

2 に答える 2

179

ssize_t戻り値が有効なサイズ、またはエラーを示す負の値のいずれかである関数に使用されます。少なくとも範囲内の値を格納できることが保証されています[-1, SSIZE_MAX](SSIZE_MAXはシステムに依存します)。

size_tそのため、サイズをバイト単位で返す場合、およびssize_tサイズをバイト単位または (負の) エラー値で返す場合はいつでも使用する必要があります。

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

于 2013-04-01T07:50:43.357 に答える