2011-06-10 2 views
1

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++

+0

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 ... –

+0

Je me demande si les références ont d'autres avantages de vitesse par rapport aux variables. – Mark

Répondre

1

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).

0

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.

+1

Ce que vous venez de dire n'a pas beaucoup de sens. – Arelius

+0

+1. Ça a du sens pour moi ;-) – Roddy

+1

Alors, quand devrais-je transmettre et/ou retourner une référence? Pouvez-vous donner un exemple? – Mark

0

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.

0

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.

1

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.

0

N ° Les économies s'appliquent uniquement à la copie, notamment lorsque vous passez en argument à la fonction et que vous renvoyez une valeur à la fonction.

Questions connexes