Peter Skrevet 31. mai 2005 Del Skrevet 31. mai 2005 Etter det jeg har forstått så pba og pbr det samme. Det mest synlige forskjellen er at pbr blir "automatisk" dereferenced når du bruker den, i motsetning til en pointer(address) som du må derefence med *ptr. Har lest noe om at du bruker pba når du er usikker på om objektet eksisterer til enhver tid, for da må man sjekke addressen mot NULL osv. Leste også noe om at man skulle bruke pba på alle objekter som skal endres, og at dette har røtter i Cs sterke pba røtter. Da sitter man jo egentlig igjen med at pbr kun skal brukes på const objekter? Spørsmålet gjelder kun c++, da pbr ikke eksisterer i C, bare pba. (Etter det jeg har lest ihvertfall!) Bare lurer på om det er noen som har noen tanker om når man skal bruke hva? (Beklager dersom dette finnes et annet sted på forumet, men har litt dårlig tid ) Lenke til kommentar
A_N_K Skrevet 31. mai 2005 Del Skrevet 31. mai 2005 Jeg pleier å bruke referanser med mindre det er noen spesiell grunn til å benytte pekere, av den enkle grunn at pekere gir merarbeid. Lenke til kommentar
☀ ❄ Skrevet 31. mai 2005 Del Skrevet 31. mai 2005 (endret) Vanlig praksis er i utgangspunktet å bruke pass-by-reference(-to-const)*, ettersom det vanligvis oppfyller det du er ute etter på en enklest mulig måte. Pass-by-address er mer egnet dersom parameteret må kunne være 0. Bjarne Stroustrup liker for øvrig å bruke pass-by-address dersom parameterne endres i funksjonen, for å indikere nettopp dét: void my_func(int* a, int* b) { *a += 2; *b += 2; } void f() { int a = 0, b = 2; my_func(&a, &b); // &-ene indikerer endring av variablene } ...men det kommer selvfølgelig an på personlig preferanse. * Årsaken til at reference-to-const er vanlig, er at implisitt typekonvertering ikke finner sted dersom du bruker reference-to-non-const, ettersom det midlertidige objektet må være const. Edit: Svar nummer 6666 i C/C++-forumet :] Endret 31. mai 2005 av Myubi Lenke til kommentar
A_N_K Skrevet 31. mai 2005 Del Skrevet 31. mai 2005 Se på std::swap f.eks, den tar imot argumenter som referanser og modifiserer dem åpenbart. Lenke til kommentar
☀ ❄ Skrevet 31. mai 2005 Del Skrevet 31. mai 2005 Jepp. Bjarne er den eneste jeg vet om som bruker pekere selv om det ikke er nødvendig. For øvrig ville det jo vært morsomt om std::swap brukte pass-by-value :] Lenke til kommentar
maskefjes Skrevet 2. juni 2005 Del Skrevet 2. juni 2005 (endret) Det er vel ikke snakk om om de endres i funksjonen, men mer en metode for å få flere retur parametre fra en funksjon: void init_vars (int *i, int *j) { *i = 0; *j = 1; } int main (void) { int i; int j; . . init_vars (&i, &j); /* & sier at det er adressen til variabelen som sendes */ . . } Endret 2. juni 2005 av maskefjes Lenke til kommentar
☀ ❄ Skrevet 2. juni 2005 Del Skrevet 2. juni 2005 Det er vel ikke snakk om om de endres i funksjonen, men mer en metode for å få flere retur parametre fra en funksjon: void init_vars (int *i, int *j) { *i = 0; *j = 1; } int main (void) { int i; int j; init_vars (&i, &j); /* & sier at det er adressen til variabelen som sendes */ } Seksjon 5.5, References, side 99, The C++ Programming Language, Special Edition: To keep a program readable, it is often best to avoid functions that modify their arguments. Instead, you can return a value from the function explicitly or require a pointer argument Det er riktig å si at det er for å indikere at parameterne endres, for om de ikke ble endret, ville ikke funksjonen gitt informasjon tilbake. Det er galt å si at det er snakk om "returparametre", for funksjoner støtter ett returparameter, og det er indikert av return. Videre er det riktig å si at det er for å markere endring inne i funksjonen, ettersom hele poenget med å bruke pekere er at man skal se at variablene ikke har samme verdi etter funksjonskallet, fremfor plutselig å oppdage at alderen din er økt med tre. Det har med å bruke kompilatoren for å oppdage feil og å bruke språket for å gjøre semantikk eksplisitt osv. å gjøre. Muligheten til å yte informasjon tilbake i flere variabler er irrelevant i denne diskusjonen, fordi det er en diskusjon om referanser kontra pekere, og både pekere og referanser har som kjent den egenskapen. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå