Почему не станд.:: строка:: max_size () == станд.:: строка:: средство выделения:: max_size ()

И HTML и URL по существу очень ограничен языки . Как язык они добавляют значение к определенным ключевым словам или операторам. Для обоих из этих языков, хотя, ключевые слова являются почти всегда отдельными символами. Например

  • HTML: > и <
  • URL: / и:

В использовании каждого язык , хотя возможно использовать эти конструкции способом, который не гарантирует значение языка. Например, это сообщение содержит > символ. Я не хочу, чтобы он был интерпретирован как HTML, просто текст.

Это - то, где Кодируют и Декодируют игравшие роль методы. Эти методы соответственно возьмут строку и преобразуют любой из символов, которые иначе рассматривали бы как ключевые слова в завершенную форму, которая не будет интерпретироваться как часть языка.

, Например: Передача > в HtmlEncode возвратит & gt;

6
задан Sinan Ünür 20 October 2009 в 11:16
поделиться

3 ответа

В Microsoft Connect была опубликована ошибка, связанная с вашим вопросом. У Microsoft есть на него интересный ответ:

Мы решили, что это По замыслу, в соответствии с нашей интерпретацией Стандарта, которая четко не объясняет, какова предполагаемая цель max_size (). Распределитель max_size () описывается как «наибольшее значение, которое может быть значимо передано в X :: allocate ()» (C ++ 03 20.1.5 [lib.allocator.requirements] / Таблица 32), но контейнер max_size () является описывается как «size () максимально возможного контейнера» (23.1 [lib.container.requirements] / Таблица 65). Ничто не описывает, должен ли контейнер max_size () быть производным от распределителя max_size () и каким образом. Наша реализация на протяжении многих лет производила контейнер max_size () непосредственно из распределителя max_size (), а затем использовала это значение для проверок переполнения и так далее. Возможны и другие интерпретации Стандарта, например ваша, но они не являются для нас однозначно правильными. Формулировка стандарта, безусловно, нуждается в пояснении. Если и до тех пор, пока это не произойдет, мы решили оставить нашу текущую реализацию без изменений по двум причинам: (1) другие клиенты могут зависеть от нашего текущего поведения, и (2) max_size () принципиально ничего не покупает. В лучшем случае вещи, которые используют распределители (например, контейнеры), могут использовать распределитель max_size (), чтобы предсказать, когда allocate () выйдет из строя, но простой вызов allocate () - лучший тест, поскольку распределитель затем решит выдавать память или нет. Вещи, потребляющие контейнеры, могут использовать контейнер max_size () как гарантию того, насколько большим может быть size (), но более простой гарантией является диапазон size_type.

Дополнительно здесь вы можете найти Core Issue # 197. Комитет рассмотрел просьбу улучшить формулировку Стандарта, но она была отклонена.

Итак, ответ на ваш вопрос «Почему ..?» в том, что Стандарт четко не объясняет, какова предполагаемая цель max_size ().

10
ответ дан 8 December 2019 в 16:05
поделиться

Я не совсем уверен, но насколько мне известно std :: basic_string в текущем стандарте не ограничивается хранением строки в непрерывной памяти. Например, он может хранить его в нескольких частях. Каждый такой фрагмент затем ограничивается std :: allocator :: max_size () , но сумма может быть больше этой.

Также, похоже, так обстоит дело с контейнерами STL. И в конце концов std :: basic_string - это контейнер.

4
ответ дан 8 December 2019 в 16:05
поделиться

В реализации GCC есть комментарий, как они вычисляют max_size (нужно вычесть размер внутреннего служебного объекта, который выделяется как один блок со строкой), а затем добавляет, что max_size () возвращает четверть от этого. Нет никакого обоснования, так что, возможно, это просто запас прочности? (Он также должен предоставлять класс веревки, который, возможно, можно было бы использовать для таких больших строк?)

В VC ++ max_size () возвращает на единицу меньше, чем allocator.max_size () - вероятно, чтобы учесть завершающий нулевой символ.

1
ответ дан 8 December 2019 в 16:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: