Является std::string
счетчик ссылок при использовании gcc 4 с -std=c++0x
или же -std=c++11
?
Смотря на документация по libstdc ++ Я нахожу (см. Ссылку для получения дополнительной информации):
Строка выглядит так:
[_Rep]
_M_length
[basic_string<char>] _M_capacity
_M_dataplus _M_refcount
_M_p ----------------> unnamed array of char_type
Так что да, это ссылка считается. Также из обсуждения Вот:
Да, std :: string будет сделан без подсчета ссылок в какой-то момент,
но поскольку строка без учета ссылок действительна и в C ++ 98,
вариант будет переключаться на строку без подсчета ссылок для обоих
Режимы -std = c ++ 98 и -std = c ++ 11. Я не говорю, что это произойдет, но это может быть.
Таким образом, кажется, есть планы изменить его, чтобы он соответствовал (хотя я не знаю, как продвигается прогресс).
Обновить
Как указывает emsr в комментариях, в настоящее время существует расширение без учета ссылок, называемое vstring.h
и, похоже, единственная причина, по которой он не заменил std::string
это из-за совместимости ABI. Есть такой вопрос по этому поводу Вот.
C ++ 11 добавил специфический язык запрещающее std::string
из ссылки считается. Так что, если это так, то это довольно существенный сбой в стандартной библиотеке GCC C ++ 11.
Добавление некоторой полезной информации, которая пост-даты этого вопроса.
std::string
будут больше никогда быть подсчитанным со ссылкой на выпуск GCC 5, чтобы удовлетворить это требование C ++ 11.
От https://gcc.gnu.org/gcc-5/changes.html
Новая реализация std :: string включена по умолчанию, используя небольшую строковую оптимизацию вместо подсчета ссылок при записи.