Avatar billede gumbert Nybegynder
07. juni 2003 - 18:35 Der er 5 kommentarer og
1 løsning

Pointere eller refarencer

Dau Eksperter ;D

  Der er egentlig ikke naden grund til at jeg vil vide dette end simpel interesse.

  Hvad er bedst i hvilke situationer: Pointere eller reffarencer????
Avatar billede arne_v Ekspert
07. juni 2003 - 18:46 #1
Vel i C har du kun pointere så ....

Men i C++ har du valget. Det afhænger jo lidt af hvordan de
skal bruges. New returnerer jo f.eks. en pointer.

Men hvis du snakker om argumenter til metoder, så plejer jeg
at bruge pointere til simple datatyper og referencer til
klasser.

Referancer giver den pæneste syntax for objekter men for simple
data typer kan jeg lide at kunne se om om de kan ændre sig
ved kaldet.
Avatar billede gumbert Nybegynder
07. juni 2003 - 18:47 #2
"koster" den ene mere end den anden. Eks hukommelse???
Avatar billede arne_v Ekspert
07. juni 2003 - 18:59 #3
Uden at have kigget på den genererede maskine-kode vil jeg
postulere at det kun er syntax og at der vil blive genereret
præcis den samme kode.
Avatar billede arne_v Ekspert
07. juni 2003 - 19:15 #4
Jeg prøvede lige.

void f1(int *v)
{
  *v = 123;
}

void f2(int& v)
{
  v = 123;
}

            0000      F1__XPI::
47EF7411    0000              MOV    123, R17                               
B2300000    0004              STL    R17, (R16)
6BFA8001    0008              RET    R26                                   

            0010      F2__XNI::
47EF7411    0010              MOV    123, R17                               
B2300000    0014              STL    R17, (R16)
6BFA8001    0018              RET    R26                                   

Det ser meget ens ud !

(Compaq C++ på OpenVMS Alpha)
Avatar billede arne_v Ekspert
07. juni 2003 - 19:21 #5
void ff();

class Z
{
  public:
      void f() { ff(); };
};

void f1(Z *z)
{
  z->f();
}

void f1(Z& z)
{
  z.f();
}

            0000      F1__XP1Z::
A79B0020    0000              LDQ    R28, 32(R27)                           
47FF0419    0004              CLR    R25
A77B0028    0008              LDQ    R27, 40(R27)
2FFE0000    000C              UNOP
6BFC0000    0010              JMP    FF__XV                                 

            0020      F1__XN1Z::
A79BFFF0    0020              LDQ    R28, -16(R27)                         
47FF0419    0024              CLR    R25
A77BFFF8    0028              LDQ    R27, -8(R27)
2FFE0000    002C              UNOP
6BFC0000    0030              JMP    FF__XV                                 

er også næsten ens.
Avatar billede segmose Nybegynder
10. juni 2003 - 11:30 #6
Der må jo så være nogle forskelle i kaldet, fx. R27 må blive opdateret med 48 i det ene tilfælde.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester