C'est vraiment tout con, mais je trouve l'idée de voir le nom des membres directement dans la signature de la fonction apporte beaucoup en lisibilité et en productivité.
Avec un IDE, tu passes la souris sur la fonction et tu sais exactement comment prendre en charge ce qui est retourné.
L'idée d'utiliser une struct anonyme pousse le concept de : je renvois des choses qui n'ont pas vocation à rester ensemble. Si un nom représente bien ce que tu renvois et/ou que stocker le résultat tel quel a du sens, alors oui, c'est pas adapté.
L'exemple le plus simple qui me vient à l'esprit : un résultat et un code d'erreur :
Le cas classique, lourd à écrire avec un nom de type de retour à la noix. Il faut 2 étapes pour connaitre le contenu de ce que retourne get_size (Chercher le type de retour de la fonction, puis le contenu de ce type).
Code:
struct HandleAndError {
int handle;
int error;
};
HandleAndError get_handle();
Léger à écrire mais il faut lire la doc pour savoir qui est qui.
Code:
std::tuple<int, int> get_handle();
Dans ce dernier cas, tu sais tout de suite qui est qui, et tu informes indirectement l'utilisateur de ne pas stoker la structure.
Code:
struct { int handle; int error; } get_handle();
(