Я озадачен результатом std::vector< char >::max_size()
в системе n= 32 и n= 64 бит, которые я тестировал. Результат равен 2 n & minus; 1. Позвольте мне объяснить, почему я озадачен.
Каждая реализация std::vector<T>
, о которой я знаю, имеет три члена типа T*
: begin_
, end_
, capacity_
.
begin_
указывает на первое значение вектора, а end_
указывает на значение после последнего.
Поэтому размер вектора определяется выражением end_ - begin_
. Но результатом этого различия является тип std::ptrdiff_t
, который является знаковым числом из n бит для каждой реализации, о которой я знаю.
Поэтому этот тип не может хранить 2 n & minus; 1, но только до 2 n & minus; 1 & минус; 1. Если вы посмотрите на свою реализацию std::vector
, вы ясно увидите, что размер имеет разницу в 2 указателя (перед тем как передать его в целое число без знака).
Итак, почему они могут притворяться, что хранят больше 2 n & minus; 1 без разбиения .size()
?