Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

weigo

Treue Seele

Beiträge: 234

Wohnort: Deutschland

  • Private Nachricht senden

21

24.03.2005, 09:55

Zitat


du kannst natürlich nicht die position von a verlegen.
natürlich kannst du aber direkt auf einen bst. speicherbereich zugreifen
(sofern er allokiert ist):

Schon klar :)

Ich habe mich wohl wieder undeutlich ausgedrückt, ich meinte nur das:

Quellcode

1
2
3
int b = 3;
int& a = b;
&a = 5;

nicht funktioniert.

helium

Treue Seele

Beiträge: 180

Wohnort: NRW, Burscheid (nahe Köln)

  • Private Nachricht senden

22

26.03.2005, 19:25

Zitat

Diese neumodischen C++'ler ... früher, da war alles besser, da hat man das noch mit Zeigern gemacht ... (und die, die von C umgestiegen sind, machen das heute komischerweise immer noch lieber als mit Referenzen)

Naja, ich habe gehört, es sei besser mit konst. Referenzen, aber warum eigentlich? Sind das intern nicht auch Zeiger? Ich meine jetzt, unabhängig von Typsicherheit und Design und so, sind Referenzen besser in der Performance?


Referenzen haben deutliche Vorteile gegenüber Zeigern, nicht, was Geschwindigkeit angeht, aber was Bequemlichkeit angeht:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
void foo (string const & x) {...}
void bar (string const * cosnt x) {...}

// Aufruf

{
   foo ("Hallo");
}
{
    string tmp = "Hallo";
    bar (&tmp);
}


Referenzen ermöglichen z.B. auch überhaupt erst eine sinnvolle Implementierung des 'operator []'.

Was Referenzen genau sind, schreibt der Standard nicht vor. In einigen Situationen werden Compiler Zeiger verwenden, die automatisch dereferenziert werden, in anderen aber auch gar nichts.

Beispiel:

C-/C++-Quelltext

1
2
int a = 42;
int & b = a;


b wird bei modernen Compilern überhaupt nicht existieren. Es wird einfach direkt a eingesetzt.
Natürlich wirkt das Beispiel sinnlos. Jetzt stellt euch aber einen Funktionsparameter vor und außerdem, dass die Funktion geinlined wird. Dann verhält es sich genauso, wie in dem gezeigten Beispiel.


Zitat

naja, was mir im (bei mir eher seltenen) umgang mit referenzen als ein wenig unpraktisch aufgefallen is, ist, dass es keine möglichkeit gibt, eine referenz quasi auf nichts zurückzugeben (so wie z.b. einen 0 zeiger beim fehlschlag einer aktion), was natürlich in der natur von c++ referenzen liegt...

wie gesagt, ich fands in manchen fällen unpraktisch.

Naja, die meisten sehen das genau andersherum: Mit Referenzen kann man sagen, dass das Objekt garnatiert gültig ist. Wenn etwas nur optional übergeben oder zurückgegeben werden soll kann man das explizit tun (z.B. mit Zeigern oder boost::optional). So ist deutlich klarer, was gemeint ist.
Why is 6 afraid of 7?
Because 7 8 9

PD

unregistriert

23

29.03.2005, 18:18

So, der gast war btw. ich ^^ Da ich selbst aber grad kein Inet habe und das aus der Firma meines dads machen musste hatte ich net dran gedacht mich einzuloggen, sry

Werbeanzeige