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

1

23.05.2010, 17:49

Wann ist call-by-reference nicht sinnvoll?

Also ich stelle mir gerade die Frage, wann man nicht call-by-reference verwenden sollte. Ich benutze es eigentlich immer, wenn es möglich ist, nur stelle ich mir so langsam die Frage, ob das überhaupt sinnvoll ist. Als Beispiel könnte man jetzt eine bool Variable oder einen Integer verwenden. In dem Fall macht es doch keinen großen Unterschied, ob man call-by-reference oder call-by-value verwendet oder? Oder mache ich es momentan richtig, dass ich selbst einfachste Variablen per Referenz übergebe?

Hier mal ein Beispiel von mir:

C-/C++-Quelltext

1
virtual int16 create(const uint32& width, const uint32& height, const bool& fullscreen, const tstring& title, const bool& dialog);
Ich weiß es dauert viel zu lange, aber ich habe echt nur Pech. Habe mir heute mal eben im Zeigefinger Nerv und Sehne durchtrennt. Dennoch kann es nicht mehr all zu lange dauern mit dem Tutorial. Außerdem kamen auch noch Prüfungen und dergleichen dazwischen.
Klatscht die Hopper an die Wand, Deutschland ist ein Raverland! :D

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

23.05.2010, 17:58

Call-by-reference kann bei sehr kleinen Objekte (minimalen) Mehraufwand bedeuten.
Spielt also nicht wirklich eine Rolle. Ich übergeb kleine Objekte per Kopie.
Ist aber, denke ich Geschmackssache.

Brauchen kannst du call-by-value z.B, wenn du den übergebenen Wert als temporäre Variable benutzen willst. Ansonsten müsstest du lokale Variablen anlegen.

little_Progger

Treue Seele

Beiträge: 188

Wohnort: Nähe Bielefeld

Beruf: Azubi

  • Private Nachricht senden

3

23.05.2010, 22:08

In Heikos Buch stehen doch hintern weiter für die 3 Arten der Übergabe Regeln drin anhand derer du es dir leichter machen kannst.

4

23.05.2010, 22:12

Was, wenn er die Schwarte nicht hat? So wie ich?

stehen doch hintern... 8-)
fka tm

little_Progger

Treue Seele

Beiträge: 188

Wohnort: Nähe Bielefeld

Beruf: Azubi

  • Private Nachricht senden

5

23.05.2010, 22:19

Dann halt nich :P

6

23.05.2010, 22:22

Auch wieder wahr! :lol:
fka tm

7

23.05.2010, 22:33

Naja ich weiß ja wann ich was zu verwenden habe. Nur in diesem Fall war ich mir nicht sicher, ob es wirklich sinnvoll ist bei einfachen, kleinen Variablen, Referenzen zu verwenden oder ob es mit Call-by-Value auf das gleiche hinaus läuft. Aber die Frage wurde ja bereits beantwortet. (Dafür danke nochmal an drakon ;) )
Ich weiß es dauert viel zu lange, aber ich habe echt nur Pech. Habe mir heute mal eben im Zeigefinger Nerv und Sehne durchtrennt. Dennoch kann es nicht mehr all zu lange dauern mit dem Tutorial. Außerdem kamen auch noch Prüfungen und dergleichen dazwischen.
Klatscht die Hopper an die Wand, Deutschland ist ein Raverland! :D

idontknow

unregistriert

8

23.05.2010, 23:12

Wenn ich mich nicht irre wird in effective C++ mal erwähnt dass man Call-By-Value bei grundtypen verwenden sollte, wie bool, int, char, da das aufgrund deren geringen Größe dann shcneller geht, bin mir aber NICHT sicher!!

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

9

23.05.2010, 23:16

Wenn ich mich nicht irre wird in effective C++ mal erwähnt dass man Call-By-Value bei grundtypen verwenden sollte, wie bool, int, char, da das aufgrund deren geringen Größe dann shcneller geht, bin mir aber NICHT sicher!!

Ja. Das steht da auch drin.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

23.05.2010, 23:55

Bei großen Typen is das Kopieren teuer, da zahlt sich eine Referenz aus. Außerdem muss man bedenken dass durch den copy Constructor z.B. bei einem std::vector nicht nur das binäre Objekt an sich sondern der ganze vector kopiert wird. Bei kleinen Typen wie z.b. allen built-in Typen ist das Kopieren allerdings praktisch gleich schnell wie das Kopieren von einem Pointer und eine Wertübergabe daher natürlich von Vorteil da kein zusätzlicher Overhead beim Zugriff anfällt.
Generell ist die Frage einfach was mehr Zeit kostet: Das einmalige kopieren oder der Overhead der durch eine zusätzliche Indirektion bei jedem Zugriff anfallen würde. Wenn ich z.B. ein 50 Byte großes Objekt habe und in meiner Funktion nur einmal drauf zugreife wird eine Referenz von Vorteil sein da das kopieren länger dauern würde als der einmalige Zugriff über die Referenz je kosten wird. Wenn ich in meiner Funktion aber z.B. in einer zeitkritischen Schleife 1.000.000 mal auf das Objekt zugreife wäre es evtl. schneller das Objekt bei der Übergabe einmal zu kopieren und dafür dann 1.000.000 mal den Overhead der Indirektion zu sparen...

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »dot« (24.05.2010, 00:02)


Werbeanzeige