Вопрос по c++, gcc – Что такое "строка" в GCC?

22

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

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

Указанная вами ссылка упоминается прямо вверху "Этот файл является расширением GNU для стандартной библиотеки C ++." Конечно, это не полностью отвечает на твой вопрос. Alok Save
Если память служит, то есть / было экспериментальное переопределениеstd::string с тем же интерфейсом, но разными внутренностями. Файл имеет даты авторских прав в 2005-2007 и ничего с тех пор; рекомендуем поиск поlibstdc++ архив списков рассылки в этот период времени для упоминаний. zwol

Ваш Ответ

1   ответ
23

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

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

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

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

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

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

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

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

В чем смысл его изобретать? Станет ли он в итоге реализацией std :: string? Johannes Schaub - litb
@ JohannesSchaub-litb - я считаю, что это было первоначальной цельюext/vstring.h, что он обеспечит реализацию строки без учета ссылок, которая в конечном итоге станет по умолчанию (или будет основой) новогоstd::string реализация для реализации GCC на C ++ 11. Существуют различные комментарии в списках рассылки GCC и отчетах об ошибках, которые, как представляется, указывают на это, наприме Gcc.gnu.org / Bugzilla / show_bug.cgi? ID = 52938 # c5 и это: Old.nabble.com / .... Это столько, сколько я знаю, не спрашивая. wkl
Gcc.gnu.org / мл / libstdc ++ / 2012-01 / msg00064.html подразумевает, что единственная причина, по которой он еще не сталstd::string реализация - это ограничения совместимости ABI. zwol
С переходом ABI в GCC 5 я ввел новыйstd::basic_string реализация, копирование большей части кода из SSO-версий vstring. Jonathan Wakely
Для тех, кто не распознает аббревиатуру (как я, всего несколько секунд назад) - SSO - это «оптимизация короткой строки», упомянутая выше. Смотрите также Значение аббревиатуры SSO в контексте std :: string здесь, в Stackoverflow. einpoklum

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