28 votes

Quel est l'intérêt de iter_swap ?

Je me demandais juste, pourquoi quelqu'un voudrait écrire ça :

std::iter_swap(i, k);

au lieu de ça ?

std::swap(*i, *k);   // saved a few keystrokes!

J'ai ensuite examiné l'implémentation de iter_swap et, bien sûr, il n'utilise que swap au lieu de std::swap puisque nous sommes déjà dans namespace std de toute façon. Cela m'amène à la question suivante :

Pourquoi quelqu'un voudrait-il écrire ça ?

using std::swap;
swap(a, b);

au lieu de ça ?

std::iter_swap(&a, &b);   // saved an entire line of code!

Y a-t-il des différences/problèmes importants que je néglige ici ?

32voto

sehe Points 123151

Extrait de la documentation de SGI ( aquí ) :

[1] Strictement parlant, iter_swap est redondant. Il n'existe que pour des raisons techniques : dans certaines circonstances, certains compilateurs ont des difficultés à effectuer la déduction de type nécessaire pour interpréter swap(*a, *b).

9voto

Mark B Points 60200

Pour répondre à votre deuxième question, le using + swap permet au compilateur d'utiliser des fonctions d'échange définies par l'utilisateur qui peuvent être plus efficaces que l'implémentation par défaut (en utilisant ADL). En disant explicitement std::swap inhibe ADL et toutes les méthodes d'échange personnalisées qu'il a pu trouver.

Quant à iter_swap il est vraisemblablement là pour être utilisé dans les modèles et indiquer clairement l'intention plutôt qu'un swap qui pourrait indiquer que vous attendez un pointeur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X