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????
Annonceindlæg fra Conscia
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.
"koster" den ene mere end den anden. Eks hukommelse???
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.
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)
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.
Der må jo så være nogle forskelle i kaldet, fx. R27 må blive opdateret med 48 i det ene tilfælde.
Kurser inden for grundlæggende programmering