2012-05-05 13 views
22

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

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

+1

Указанная ссылка упоминается в верхней части * «Этот файл является расширением GNU для стандартной библиотеки C++». * Конечно, это не полностью отвечает на ваш вопрос. –

+0

Если память служит, то есть/была экспериментальной переопределением 'std :: string' с тем же интерфейсом, но с разными настройками. Файл имеет даты авторских прав в 2005-2007 годах, и с тех пор ничего нет; рекомендуем в течение этого периода времени искать в архиве списка рассылки ['libstdC++'] (http://gcc.gnu.org/ml/libstdc++/). – zwol

ответ

23

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

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

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

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

Основные сведения от GCC 4.1's release notes, под рубрикой Runtime Library.

редактировать:

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

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

+0

В чем причина его изобретения? В конечном итоге это станет реализацией std :: string? –

+1

@ JohannesSchaub-litb - Я полагаю, что это была оригинальная цель 'ext/vstring.h', что она предоставила бы реализацию без ссылки на подсчитанную строку, которая в конечном итоге станет стандартной (или станет основой) нового' std :: string' для реализации GCC C++ 11. Существуют различные комментарии в списках рассылки GCC и сообщениях об ошибках, которые, как представляется, указывают на это, как этот комментарий: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52938#c5 и это: http: // old.nabble.com/Re%3A--RFC--C%2B%2B1x-breaking-the-ABI-in-one-more-place-%3A%28-p28618810.html. Это столько, сколько я знаю, не спрашивая. – birryree

+2

http://gcc.gnu.org/ml/libstdc++/2012-01/msg00064.html подразумевает, что единственной причиной, по которой он еще не стал реализацией 'std :: string', является ограничение совместимости ABI. – zwol

Смежные вопросы