почему функция std :: vector max_size () возвращает -1? - PullRequest
3 голосов
/ 23 октября 2009

у меня есть std::vector<unsigned char> m_vData;

m_vData.max_size() всегда возвращает -1. с чего бы это случилось?

Ответы [ 3 ]

18 голосов
/ 23 октября 2009

Возможно, потому что вы присваиваете его типу со знаком перед просмотром. Возвращаемое значение max_size обычно равно size_t, что является беззнаковым типом. Прямое преобразование, скажем, int на многих платформах, вернет -1.

Попробуйте вместо этого

std::vector<unsigned char>::size_type v1 = myVector.max_size();
7 голосов
/ 23 октября 2009

Обратите внимание, что max_size() возвращает vector::size_type, которое не подписано, поэтому вы видите отрицательное число из-за его преобразования куда-то (вы действительно получаете очень большое число без знака).

В реализации говорится, что она может обрабатывать векторы с таким количеством элементов (хотя я сомневаюсь, что вы действительно выделите один).

Это не количество элементов в векторе (или зарезервированное для вектора). Вы можете получить эти цифры с помощью vector::size() или vector::capacity().

4 голосов
/ 23 октября 2009

Обратите внимание, что на большинстве платформ std::vector<unsigned char>::max_size вполне может быть таким же, как std::numeric_limits<unsigned int>::max(), который, конечно, равен -1 при преобразовании в целое со знаком.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...