Почему нет поддержки для конкатенации std::string и std:: string_view?
Так как С++ 1z, std::string_view
, легкий вид в непрерывную последовательность символов, которая позволяет избежать ненужного копирования данные. Вместо того, чтобы иметь параметр const std::string&
, теперь часто рекомендуется использовать std::string_view
.
Однако быстро обнаруживается, что переключение с const std::string&
на std::string_view
прерывает код, который использует конкатенацию строк, поскольку нет поддержки для конкатенации std::string
и std::string_view
:
std::string{"abc"} + std::string_view{"def"}; // ill-formed (fails to compile)
std::string_view{"abc"} + std::string{"def"}; // ill-formed (fails to compile)
Почему нет поддержки для конкатенации std::string
и std::string_view
в стандарте?
Ответы
Ответ 1
Причина этого указана в n3512 string_ref: ссылка на не принадлежащую строчку, версия 2 Джеффри Яскина:
Я также пропустил оператор + (basic_string, basic_string_ref), потому что LLVM возвращает легкий объект из этой перегрузки и лениво выполняет конкатенацию. Если мы определим эту перегрузку, нам будет сложно ввести эту легкую конкатенацию позже.
Позже было предложено в std-proposals список рассылки, чтобы добавить эти перегрузки оператора в стандарт.