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?
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.