Я озадачен результатом 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()?