c++ - poner - ¿Por qué no hay soporte para concatenar std:: string y std:: string_view?
ejercicios c++ strings (1)
Desde C ++ 1z, tenemos std::string_view
, una vista liviana en una secuencia contigua de caracteres que evita la copia innecesaria de datos. En lugar de tener un const std::string&
parámetro, ahora se recomienda usar std::string_view
.
Sin embargo, uno descubre rápidamente que cambiar de const std::string&
a std::string_view
rompe el código que usa la concatenación de cadenas, ya que no hay soporte para concatenar std::string
y 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)
¿Por qué no hay soporte para concatenar std::string
y std::string_view
en el estándar?
La razón de esto se da en n3512 string_ref: una referencia no propietaria a una cadena, revisión 2 por Jeffrey Yasskin:
También omití el operador + (basic_string, basic_string_ref) porque LLVM devuelve un objeto ligero de esta sobrecarga y solo realiza la concatenación perezosamente. Si definimos esta sobrecarga, tendremos dificultades para introducir esa concatenación liviana más adelante.
Más tarde se sugirió en la lista de correo de las groups.google.com/a/isocpp.org/forum/#!topic/std-proposals/… estándar para agregar estas sobrecargas de operadores al estándar.