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
Administrator
Zitat von »"David_pb"«
Konstante Referenzen werden bei allen Parametern verwendet die kein primitiver Datentyp sind, nämlich um unnötige Datenkopiererei zu vermeiden.
C-/C++-Quelltext |
|
1 |
void IrgendeineFunktion( IrgendeineKlasse * parameter); |
C-/C++-Quelltext |
|
1 |
IrgendeineFunktion(IrgendeineKlasse & parameter)
|
Administrator
Zitat von »"Beneroth"«
Aber was wird konstant bei
C-/C++-Quelltext
1IrgendeineFunktion(IrgendeineKlasse & parameter)
Zitat von »"Beneroth"«
Was ist wenn eine Funktion einer Konstanten Referenz aufgerufen wird, geht das dann nur wenn die Funktion keine Membervariable ändert?
C-/C++-Quelltext |
|
1 2 3 4 5 |
IrgendeineFunktion(const IrgendeineKlasse& parameter) { parameter.machWasDasDichVeraendert(); // <= geht nicht parameter.gibDeinenWert(); // geht, wenn "gibDeinenWert" const ist } |
Zitat von »"Beneroth"«
Und im Fall dass ich eine Liste von Referenzen habe, von denen je eine Methode aufgerufen wird...sollte da die Referenz konstant sein oder nicht?
C-/C++-Quelltext |
|
1 2 3 4 |
int einInt = 42; int nochEinInt = 43; int& referenzAufEinenInt = einInt; referenzAufEinenInt = nochEinInt; // hier wird "einInt" geändert, nicht die Referenz |
Zitat von »"David Scherfgen"«
[...] Das geht mit Referenzen nicht (so leicht).
C-/C++-Quelltext |
|
1 2 3 4 5 |
void foo(blub& x); // ... foo(*((blub*)0)); |
Zitat von »"David Scherfgen"«
Zitat von »"Beneroth"«
Aber was wird konstant bei
C-/C++-Quelltext
1IrgendeineFunktion(IrgendeineKlasse & parameter)
Gar nichts, oder siehst du da irgendwo ein const?
Zitat von »"David Scherfgen"«
Listen von Referenzen sind nicht machbar.
Zitat von »"Beneroth"«
Aber die Adresse von ner Referenz ist immer ne Konstante.
C-/C++-Quelltext |
|
1 2 3 4 |
blub a; blub& foo = a; blub&* p = &foo; // foo ist eine referenz auf a. &foo gibt die adresse von a... // pointer auf referenzen haben schon allein darum keinen sinn |
C-/C++-Quelltext |
|
1 |
blub& const r = foo; // sinnlos |
Zitat von »"Beneroth"«
Und bei konstanten referenzen können nur konstante methoden aufgerufen werden.
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
class blub { public: void foo() {}; }; // ... const blub obj; obj.foo(); // FEHLER const blub& a = obj; a.foo(); // immer noch falsch ;) blub& b = const_cast<blub&>(a); // laserschwertmethode b.foo(); // kompilliert, aber undefiniertes verhalten... |
Zitat von »"Deviloper"«
Naja bei templates würde ich aber nicht noch unter primitiven Datentypen usw. unterscheiden und dann einfach direkt per const-Ref statt value arbeiten!
Administrator
Zitat von »"dot"«
Zitat von »"David Scherfgen"«
[...] Das geht mit Referenzen nicht (so leicht).
och...
C-/C++-Quelltext
1 ...
Werbeanzeige