[Alg C++] Pass by reference/Pass by pointer

Pagina: 1
Acties:

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:57
Ik ben hier een progje aan het bouwen in C++ Builder en bij de eventhandler van de OnClose event van mijn form ziet er als volgt uit:
code:
1
2
void __fastcall TfrmDetCategorie::FormClose(TObject *Sender,
                              TCloseAction &Action)

Zoals je kunt zien wordt de parameter Sender met een pointer doorgegeven en de parameter Action als reference. Beide methodes zorgen ervoor dat je de waarde van die parameter dus binnen de functie kunt wijzigen en dat die wijzigingen dan ook gelden buiten de functie. Functioneel is er dus eigenlijk geen verschil tussen die 2 methodes.

Nu vraag ik mij af, is de werking van die 2 methodes intern anders?

https://fgheysels.github.io/


Verwijderd

Voorzover ik weet zijn references na het compilen exact hetzelfde als pointers.

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:57
Op zaterdag 09 februari 2002 11:26 schreef Sneech het volgende:
Voorzover ik weet zijn references na het compilen equivalent aan pointers.
Er is dus eigenlijk geen verschil tussen die 2. Gewoon dat uw code mooier is als je een pointer by pointer doorgeeft en een variable die op de stack gealloceerd is by reference.

https://fgheysels.github.io/


Verwijderd

Op zaterdag 09 februari 2002 11:28 schreef whoami het volgende:

[..]

Er is dus eigenlijk geen verschil tussen die 2. Gewoon dat uw code mooier is als je een pointer by pointer doorgeeft en een variable die op de stack gealloceerd is by reference.
Nou, zover zou ik niet willen gaan. Maar als je even een stukje code als dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
void f (int *) {}
void g (int &) {}

int main ()
{
    int a = 6;
    int * b = &a;
    int & c = a;

    f (b);
    g (c);
}

naar assembly laat compilen, zie je dat er inderdaad geen verschil is.

Verwijderd

In het geval van referentie scheelt het je bij een assignment aan de waarde van een pointer een sterretje :)

Zou het zaken als optimalisatie niet makkelijker maken? Ten eerste mag een referentie niet null zijn. Ten tweede, bij het referentie verander je minder vaak het adres dan bij een pointer, naar mijn idee?

Bij een referentie kan je hooguit iets doen als:

int x, y;
int &a = x;
&a = y; // kan dit overigens?

Terwijl je bij een pointer:

ook nog het adres kan ophogen, verlagen.

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Ik denk inderdaad dat het belangrijkste verschil is dat een referentie altijd naar een object verwijst (en dus geen checking nodig heeft). Bovendien kunnen referenties ook weggeoptimaliseerd worden waardoor de referentie geen geheugen in gebruik neemt, terwijl dit bij pointers wel het geval is (IIRC).
Pagina: 1