Cette syntaxe a fait couler beaucoup d'encre. Elle est soutenue depuis le départ par Herb Sutter et Bjarne Stroustrup, mais elle ne fait pas l'unanimité. En particulier parce qu'elle complexifierait beaucoup les règles déjà très complexe de recherche de nom. Et aussi parce qu'un des deux sens a un souci.
Le sens qui va bien, c'est de chercher my_string.size() quand on écrit size(my_string). Actuellement, il y a beaucoup de fonctions qui sont définies pour ces cas là (genre begin/end). Le sens qui ne va pas bien, c'est de chercher size(my_string) quand on écrit my_string.size(). Parce que là, si la fonction size a un problème, on donne l'impression que c'est une méthode de my_string qui a un problème. En fait, c'est comme si on ajoutait des méthodes à une classe et ça peut poser des problèmes de définitions. Si un jour, l'auteur ajoute une méthode size() à sa classe, l'appel my_string.size() n'appellera plus size(my_string) et ça passera totalement inaperçu.
[^] # Re: Syntaxe d'appel uniforme
Posté par rewind (Mastodon) . En réponse au journal C++17 est sur les rails. Évalué à 3.
Cette syntaxe a fait couler beaucoup d'encre. Elle est soutenue depuis le départ par Herb Sutter et Bjarne Stroustrup, mais elle ne fait pas l'unanimité. En particulier parce qu'elle complexifierait beaucoup les règles déjà très complexe de recherche de nom. Et aussi parce qu'un des deux sens a un souci.
Le sens qui va bien, c'est de chercher
my_string.size()quand on écritsize(my_string). Actuellement, il y a beaucoup de fonctions qui sont définies pour ces cas là (genrebegin/end). Le sens qui ne va pas bien, c'est de cherchersize(my_string)quand on écritmy_string.size(). Parce que là, si la fonctionsizea un problème, on donne l'impression que c'est une méthode demy_stringqui a un problème. En fait, c'est comme si on ajoutait des méthodes à une classe et ça peut poser des problèmes de définitions. Si un jour, l'auteur ajoute une méthodesize()à sa classe, l'appelmy_string.size()n'appellera plussize(my_string)et ça passera totalement inaperçu.