C++11 и C++03 отличаются поддержкой оптимизации небольших строк для std::string?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 C++11 и C++03 отличаются поддержкой оптимизации небольших строк для std::string?

Сообщение Anonymous »

В приложении совместимости стандарта C++11 одно из изменений с C++03 на C++11 описано ниже:


C.2.11, пункт 21: библиотека строк

21.4.1

Изменение: ослабить недействительность базовой_строки Rules

Обоснование: разрешить оптимизацию небольших строк.

Влияние на исходную функцию: Действительный код C++ 2003 может выполняться
по-другому в этом международном стандарте. Некоторые функции-члены const
, такие как data и c_str, больше не делают итераторы недействительными.


Правило недействительности итераторов std::string действительно изменилось с C++03 на C++11 в этом data() и c_str() больше не разрешено делать итераторы недействительными, но я не знаю, как это приводит к обоснованию "

Код: Выделить всё

allow small-string optimization
"? Разве SSO уже не был разрешен до C++11?



Два различия std::string между C++11 и C++03, о которых я знал до того, как наткнулся на примечания к SSO в приложении совместимости:
  • Элементы гарантированно будут храниться смежно в C++11
  • Реализация COW не является опцией в C++11 (некоторые операции, такие как оператор[], не могут делать итераторы недействительными)
Я воспринял неинвалифицирующую гарантию C++11 c_str() и data() как прямой результат изменения в сторону непрерывного хранения. Теперь кажется, что есть некоторая связь с SSO. реализации, и мне хотелось бы узнать подробности скрытой логики.

Подробнее здесь: https://stackoverflow.com/questions/223 ... -stdstring
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»