web-dev-qa-db-fra.com

Pourquoi n'y a-t-il pas de support pour concaténer std :: string et std :: string_view?

Depuis C++ 1z, nous avons std::string_view , une vue légère dans une séquence contiguë de caractères qui évite la copie inutile de données. Au lieu d'avoir un const std::string&, il est désormais souvent recommandé d'utiliser std::string_view.

Cependant, on découvre rapidement que le passage de const std::string& à std::string_view rompt le code qui utilise la concaténation de chaînes car il n'y a pas de prise en charge pour la concaténation std::string et 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)

Pourquoi n'y a-t-il pas de support pour la concaténation std::string et std::string_view dans la norme?

40
s3rvac

La raison en est donnée dans n3512 string_ref: une référence non propriétaire à une chaîne, révision 2 par Jeffrey Yasskin:

J'ai également omis operator + (basic_string, basic_string_ref) car LLVM renvoie un objet léger à partir de cette surcharge et n'effectue que la concaténation paresseusement. Si nous définissons cette surcharge, nous aurons du mal à introduire cette concaténation légère plus tard.

Il a été suggéré plus tard sur la liste de diffusion std-propositions pour ajouter ces surcharges d'opérateur à la norme.

16
vitaut