Как обнаружить использование std::string SSO (оптимизация короткой строки)?C++

Программы на C++. Форум разработчиков
Anonymous
Как обнаружить использование std::string SSO (оптимизация короткой строки)?

Сообщение 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 вступит в силу, поскольку базовая память строки не выделяется динамически, и перемещение теперь (под капотом) становится деструктивной операцией копирования, оставляя представление недействительным.
Есть ли способ обнаружить SSO (чтобы я мог предпринять соответствующие действия в своем классе) переместить конструктор)? И есть ли в стандарте какая-либо ссылка на SSO?

Подробнее здесь: https://stackoverflow.com/questions/798 ... timization

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