les tuples
Je pense que je suis d'accord avec vous que le problème avec ce poste correspond à ce que la variable peut introduire de la confusion. Mais je pense qu'il y a deux côtés. L'un est l' appel côté et de l'autre est le destinataire de l'appel du côté de:
int remainder;
int quotient;
tie(quotient, remainder) = div(10, 3);
Je pense que c'est limpide, ce que nous avons, mais il peut devenir source de confusion si vous devez retourner plusieurs valeurs à la fois. Une fois que l'appelant programmeur a regardé la documentation de l' div
, il va savoir ce que la position est quoi, et pouvez écrire du code. En règle générale, je dirais de ne pas revenir à plus de 4 valeurs à la fois. Pour rien au-delà, préférez une struct.
les paramètres de sortie
Les paramètres de sortie peuvent être utilisés aussi, bien sûr:
int remainder;
int quotient;
div(10, 3, "ient, &remainder);
Maintenant, je pense que l'illustre la façon dont les tuples sont mieux que les paramètres de sortie. Nous avons mélangé la saisie d' div
, et sa sortie, tout n'est pas gagner d'avantage. Pire, nous laissons le lecteur de code dans le doute sur ce que pourrait être la réelle valeur de retour de l' div
être. Il sont de merveilleux exemples lorsque les paramètres de sortie sont utiles. À mon avis, vous devriez utiliser uniquement quand vous avez pas d'autre moyen, parce que la valeur de retour est déjà pris et ne peut pas être modifié soit un tuple ou structure. operator>>
est un bon exemple de l'endroit où vous utilisez des paramètres de sortie, car la valeur de retour est déjà réservée pour le flux de données, de sorte que vous pouvez de la chaîne d' operator>>
des appels. Si vous n'avez pas à faire avec des opérateurs, et le contexte n'est pas clair, je vous recommande d'utiliser des pointeurs, pour signaler à l'appel côté que l'objet est en fait utilisé comme un paramètre de sortie, en plus des commentaires le cas échéant.
de retour d'une struct
La troisième option consiste à utiliser une structure (struct):
div_result d = div(10, 3);
Je pense que certainement remporte le prix pour la clarté. Mais notez que vous avez toujours accès à la résultat à l'intérieur de cette structure, et le résultat n'est pas "mis à nu" sur la table, comme c'était le cas pour les paramètres de sortie et le n-uplet utilisé avec tie
.
Je pense que d'un point majeur de ces journées est de faire tout aussi générique que possible. Donc, disons que vous avez une fonction qui permet d'imprimer des n-uplets. Vous pouvez le faire
cout << div(10, 3);
Et vous avez votre résultat affiché. Je pense que les tuples, de l'autre côté, gagne clairement pour leurs polyvalent de la nature. Que faire avec les div_result, vous avez besoin de surcharger l'opérateur<<, ou de besoin à la sortie de chaque membre séparément.