Подтвердить что ты не робот

Что такое GCC "vstring"?

Я прочитал некоторые ошибки GCC, и люди говорили о "vstring". Поиск в WEB я заметил http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.2/vstring_8h.html.

Может кто-нибудь прокомментировать, для чего он полезен и для чего он используется? Зачем использовать его вместо std::string?

4b9b3361

Ответ 1

GCC vstring - это универсальный класс строк, который был введен в реализацию GCC 4.1 libstdc++.

Он совместим с std::basic_string, с этими дополнительными деталями:

  • Предоставляются два базовых класса:
    • по умолчанию исключается подсчет ссылок и оптимизирован для коротких строк;
    • альтернативный, все еще использует его (подсчет ссылок, то есть), одновременно улучшая несколько областей низкого уровня (например, выравнивание). См. vstring_fwd.h для некоторых полезных typedefs.
  • Были переписаны различные алгоритмы (например, замена), добавлены упорядоченные и простые оптимизаторы кода.
  • Вариант 3 DR 431 реализован для обеих доступных баз, таким образом улучшая поддержку генераторов с сохранением состояния.

DR431 Отчет о дефекте рабочей группы библиотеки 431, с вариантом 3, похожим на реализацию лучшей поддержки распределителя для класса, чтобы обеспечить лучшую замену и другой распределитель связанных операций.

Основные сведения из примечания к выпуску GCC 4.1 в разделе библиотеки Runtime Library.

изменить:

Похоже, что первоначальная цель этого расширения заключалась в том, чтобы обеспечить основу для реализации С++ 11 std::string. Паоло Карлини, разработчик GCC/libstdС++, комментирует в этом GCC Bug Report, что <ext/vstring.h> содержит неосновную подсчитанную экспериментальную версию следующего std::string. Комментарий от 12 апреля 2012 года:

Мы попытались объяснить, что такая проблема хорошо известна и, более или меньше, влияет на любую ссылочную подсчитанную реализацию... Это не тот случай, когда подсчет ссылок не используется, и действительно, это не будет (в соответствии с новым стандартом С++ 11) в новой реализации std::string, которая мы в настоящее время демонстрируем как <ext/vstring.h>...