Dans ce article il est dit que les références vous permettent de réduire la quantité de copie dans les coulisses. Est-ce que la référence réduit toute autre opération par rapport à une variable?référence vs variable en C++
Répondre
La référence est une sorte de variable. Vous demandez de passer par référence au lieu de passer par la valeur. Passer par valeur crée une copie de la valeur transmise, tandis que passer par référence signifie que le récepteur pourra changer la même variable que celle que vous avez transmise.
Les deux ont leurs propres avantages et inconvénients, et devraient être utilisés le cas échéant (par exemple, par référence serait parfois utilisé pour économiser sur les opérations de copie ou obtenir des valeurs de retour, tandis que la valeur serait utilisée pour transmettre des données t être localement modifié mais sera changé dans la fonction appelée).
L'idée d'une référence comme une variable comme ceci:
const int & r = 42;
est fondamentalement faux. OK, vous pouvez créer de telles choses, mais ce que les références ont été conçues à l'origine était de faciliter le passage des objets aux fonctions et (dans une moindre mesure) les renvoyer des fonctions. Si vous les utilisez dans n'importe lequel de ces deux contextes, à moins que vous ne soyez beaucoup, beaucoup plus intelligent que moi, ou la plupart des autres programmeurs, vous vous trompez.
Si vous êtes préoccupé par l'utilisation de la mémoire, pensez simplement à passer par référence en passant par valeur avec un pointeur, avec le sale travail effectué en coulisses. La quantité de mémoire utilisée par le pointeur dépend de la plate-forme/du système d'exploitation.
Pour répondre à votre question exacte, le fait de passer par référence ne fait qu'une chose: il vous permet de passer une variable dans une fonction au lieu d'une copie de cette variable.
Selon le moment où cela est utilisé, les implications sont énormes. Mais c'est la réponse la plus fondamentale que je puisse penser pour vous aider à démarrer. Edit: J'ai vu que votre souci était la vitesse. Il est toujours fortement recommandé de passer par référence chaque fois que c'est une option, car les économies de vitesse peuvent être énormes, surtout quand une classe/struct énorme est passée dans une fonction.
Sur la plupart compilateur, les références sont mises en œuvre à l'aide pointeurs, et donc, les mêmes coûts exacts que ceux qui auraient été implicites si vous utilisiez un pointeur au lieu d'une référence.
Notez que la norme ne force pas l'implémentation des références à s'appuyer sur des pointeurs. En particulier
It is unspecified whether or not a reference requires storage (3.7).
Les références vous permettent de transmettre des arguments "par référence", par opposition à "transmis par copie".
void f(int & r) { r = 1; }
void g(int const * p) { *p = 2; }
void h(int j) { j = 3; }
int main()
{
int i = 0;
f(i); // i now equals 1
g(&i); // i now equals 2 (the address of i was given to g)
h(i); // i is copied and thus not modified (ie i == 2 after this line)
}
Voir également C++ faqlite: references.
N ° Les économies s'appliquent uniquement à la copie, notamment lorsque vous passez en argument à la fonction et que vous renvoyez une valeur à la fonction.
- 1. pointeur vs référence en C++
- 2. performances variable locale en Javascript vs C#
- 3. Modification d'une variable affecte une variable indirecte (valeur vs référence)
- 4. java vs C++ passer par référence
- 5. C++/CLI de référence variable
- 6. En utilisant 'variable' vs '_variable'?
- 7. Objectif C: variable d'instance comme référence
- 8. variable de référence en java
- 9. Passe référence variable en fonction
- 10. Renvoyer la référence à la variable locale statique en C++
- 11. Clarification de la variable de référence C++
- 12. C++ "référence à la variable locale retournée"
- 13. C++ passant variable par référence (fenêtre SFML)
- 14. C++ - utiliser dynamiquement référence ou variable locale
- 15. Portée vs durée de vie de la variable en C
- 16. VS 2010 Débogage de variable locale C++
- 17. Contexte.Items vs variable locale?
- 18. désérialisation d'objets en passant une référence vs renvoi d'une référence
- 19. C++ vs C# BadPointer/BadReference?
- 20. Ajouter une référence à l'aide de VS 6.0 C++!
- 21. référence universelle vs priorité de référence const?
- 22. javascript variable référence/alias
- 23. JQuery Value vs Référence
- 24. MongoDB: plongement vs référence
- 25. MongoDB référence vs imbriquée
- 26. passage variable globale en référence et en modifiant la variable
- 27. Comportement de référence en C++
- 28. Type de référence C++ comme variable d'instance dans Objective-C++
- 29. conversion implicite: référence const vs référence non-const vs non-référence
- 30. par référence en C++
Moins de copie implique moins de destruction aussi. Quel genre de chose aviez-vous en tête?Évidemment, l'utilisation d'une référence ne réduit pas intrinsèquement le nombre de fois que vous devez contourner une boucle avant qu'elle ne soit terminée, ou quelque chose comme ça ... –
Je me demande si les références ont d'autres avantages de vitesse par rapport aux variables. – Mark