Мне пришло в голову, что я заметил, что операция std::string
substr
может быть намного более эффективной для rvalues, когда она может украсть выделенную память из *this
.
Стандартная библиотека N3225 содержит следующее объявление функции функции std::string
basic_string substr(size_type pos = 0, size_type n = npos) const;
Может ли реализация, которая могла бы реализовать оптимизированную перегрузку substr
для rvalues, и предоставить две версии, одна из которых могла бы повторно использовать буфер для строк 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;
}
Эффективно ли это работает на общих строковых реализациях или это потребует слишком много домашнего хозяйства?