Если std::size_type
из std::string
является то, что распределитель по умолчанию,Как может size_type быть беззнаковым интегралом, если npos равно -1?
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++ Standard
5.3.3 Sizeof
результат sizeof и sizeof ... является константой типаstd::size_t
.
[Примечание: станд :: size_t определен в стандартном заголовочном<cstddef>
8.2 Типы
содержимое такие же, как библиотеки заголовка Стандарт C<stddef.h>
, со следующими изменениями:
C Стандартная
6.5.3.4 В SizeOf и _Alignof операторы
Значение результата обоих операторов определяется реализацией,
и его тип (целое число без знака тип)size_t
, определенный в<stddef.h>
(и другие заголовки).
Как можно std::basic_string::npos (определяется как size_type
) be -1?
Это '-1' неявно преобразован в' size_type'? –
Вы действительно прочитали страницу, с которой вы связались? Там в первом предложении говорится: «Это специальное значение, равное максимальному значению, представляемому типом size_type». – user463035818