Подтвердить что ты не робот

Следует использовать size_t или ssize_t

В моем коде я не использую 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, когда это может быть отрицательным.

Но я нахожу, что:

Беззнаковые целые типы идеально подходят для использования, которые рассматривают хранилище как бит-массив.     Использование unsigned вместо int для получения еще одного бита для представления положительных целых чисел почти никогда не является хорошей идеей.     Попытки убедиться, что некоторые значения положительны, объявив переменные без знака, обычно будут побеждены правилами неявного преобразования.

в книге Язык программирования С++.

Итак, я озадачен. Я ошибаюсь? Почему STL не поддерживает предложение в книге?

4b9b3361

Ответ 1

ssize_t используется для функций, возвращаемое значение которых может быть либо допустимым, либо отрицательным значением для указания ошибки. Гарантируется сохранение значений, по крайней мере, в диапазоне [-1, SSIZE_MAX] (SSIZE_MAX зависит от системы).

Поэтому вы должны использовать size_t, когда хотите вернуть размер в байтах, и ssize_t, когда вы возвращаете либо размер в байтах, либо значение (отрицательное).

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

Ответ 2

ssize_t не входит в стандарт и не переносится. size_t следует использовать при обработке размера объектов (там ptrdiff_t тоже, для различий указателя).