2012-11-08 4 views
0

Possible en double:
Pass by reference more expensive than pass by valueTransmettre le paramètre par valeur ou par référence en C++?

Je veux savoir ce qui est mieux, l'envoi de paramètres par valeur ou par référence en C++. J'ai entendu dire qu'il y a des cas où l'envoi par valeur est plus rapide que l'envoi par référence. Quels sont ces cas?

Merci

+2

où avez-vous entendu cela? – UmNyobe

+0

Lorsque vous envoyez par valeur - une copie de l'objet est créée (en prenant beaucoup de temps et d'espace). Donc, à la place, il est préférable d'envoyer par const & ou & (dans le cas où vous voulez modifier l'objet) –

+0

@UmNyobe Peut-être ici [Voulez-vous la vitesse? Passer par la valeur.] (Http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/). Mais il y a aussi une discussion ici: http://stackoverflow.com/questions/2108084/pass-by-reference-more-expensive-than-pass-by-value – RedX

Répondre

1

En règle générale, vous devez passer les types POD en valeur et types complexes par référence const. Cela dit, un bon endroit où vous passez des types complexes par valeur est l'endroit où vous auriez besoin d'une copie de l'objet à l'intérieur de la fonction. Dans ce cas, vous avez deux choix:

  • passe l'argument comme référence const et créer une copie locale dans la fonction

  • passer l'argument par valeur (le compilateur crée la copie locale).

La deuxième option est généralement plus efficace. Pour un exemple, voir le copy&swap idiom.

1

Le cas est évidente lorsque le paramètre est égal ou inférieur à un pointeur taille et trivial de copier - alors vous passeriez par valeur. Cependant, ceci est une discussion séculaire et une réponse assez longue est nécessaire pour y répondre correctement pour une architecture donnée. Il existe également de nombreux cas d'angle (par exemple RVO).

Il y a plus à la question que la vitesse - la sémantique devrait être votre première priorité.

Voir aussi: Is it better in C++ to pass by value or pass by constant reference?

Questions connexes