Мне пришло в голову, что я заметил, что операция std::string
substr
может быть намного более эффективной для значений, когда она может украсть выделенную память из *this
.
Стандартная библиотека N3225 содержит следующее объявление функции-члена std::string
basic_string substr(size_type pos = 0, size_type n = npos) const;
Может ли реализация, которая может реализовать оптимизированную substr
для перегрузки значений, предоставить две версии,один из которых мог бы повторно использовать буфер для строк rvalue?
basic_string substr(size_type pos = 0) &&;
basic_string substr(size_type pos, size_type n) const;
Я полагаю, что версия rvalue могла бы быть реализована следующим образом, повторно используя память *this
установки *this
в состояние перемещения.
basic_string substr(size_type pos = 0) && {
basic_string __r;
__r.__internal_share_buf(pos, __start + pos, __size - pos);
__start = 0; // or whatever the 'empty' state is
return __r;
}
Работает ли это эффективно в распространенных реализациях строк или это заняло бы слишком много домашнего хозяйства?