Если std::size_type
из std::string
соответствует распределителю по умолчанию,
21.3.1 Шаблон класса basic_string
typedef typename allocator_traits<Allocator>::size_type size_type;
А std::size_type
для распределителя по умолчанию — это std::size_t
,
20.9.9 Распределитель по умолчанию
typedef size_t size_type;
И мы знаем, что std::size_t
всегда является целым числом без знака,
Стандарт C++
5.3.3 Sizeof
Результатом sizeof и sizeof... является константа типаstd::size_t
.
[Примечание: std: :size_t определяется в стандартном заголовке<cstddef>
8.2 Типы
Содержимое совпадает с заголовком<stddef.h>
стандартной библиотеки C со следующими изменениями:
Стандарт C
6.5.3.4 Операторы sizeof и _Alignof
Значение результата обоих операторов определяется реализацией,
и его типом ( целочисленный тип без знака) — этоsize_t
, определенный в<stddef.h>
(и других заголовках).
Как std::basic_string::npos (определяется как size_type
) быть -1?
-1
неявно преобразуется вsize_type
? - person T.C.   schedule 02.05.2016