C++ std::string обнаружение оптимизации коротких строкC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 C++ std::string обнаружение оптимизации коротких строк

Сообщение Anonymous »

Если у вас есть строка

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

 std::string       data("This is a string long enough so that it is not a short string");
Тогда вы увидите эту строку:

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

 std::string_view  dataView(std::begin(data) + 5, std::end(data) - 5);
Если я перенесу исходную строку.

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

 std::string       movedData(std::move(data));
Тогда я ожидаю, что представление dataView останется действительным.
Но это предположение не выполняется, если оптимизация коротких строк std::string вступает в силу, поскольку базовая память строки не выделяется динамически, и перемещение теперь (под капотом) становится деструктивной операцией копирования, оставляющей представление недействительным.
Вопросы:
  • Есть ли что-нибудь в стандарте по этому поводу.
  • Есть ли способ обнаружить оптимизацию коротких строк (чтобы я мог предпринять соответствующие действия в конструкторе перемещения класса)?


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

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

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

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

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

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