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

21.07.2010, 00:02

Referenzen als Funktions-Paramter

Hi Leute,

ich mich gefragt wann bei einer Funktion Referenzen als Parameter übergeben werden sollen und wann "const" benutzt werden soll.
Bis jetzt habe ich alle einfachen Datentypen als Call-by-Value übergeben und Strukturen, Klassen als Referenz.
Alle Parameter sind bei mir auch "const" (auch die Konstruktor Parameter).

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Foo
{
public:
    Foo(const int value, const Foo& other);

    void SetValue(const int value);
    void SetFoo(const Foo& other);

    int GetValue() const;
    Foo& GetFoo() const;

private:
    int  mValue;
    Foo mCopy;
};

CBenni::O

1x Contest-Sieger

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

2

21.07.2010, 00:08

So sollte man das auch machen.

Nur wenn der Parameter verändert werden soll, einen Zeiger bzw. eine nicht-const-Referenz übergeben
Was dir lieber ist, bleibt dir allerdings selbst überlassen ;)
mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

KeksX

Community-Fossil

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

3

21.07.2010, 00:12

Wenn es nur ums lesen geht, ist eine Verwendung von konstanten Variablen sinnvoll. So weiß der Verwender hinterher auch, dass diese Funktion nichts ans seiner Variable rumbastelt.
WIP Website: kevinheese.de

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

21.07.2010, 10:33

Na ja, also "const int value" finde ich schon etwas übertrieben. Da kann die Methode so oder so nichts nachhaltig verändern. Bei Referenzen halte ich es aber durchaus für angemessen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

5

21.07.2010, 11:27

Na ja, also "const int value" finde ich schon etwas übertrieben. Da kann die Methode so oder so nichts nachhaltig verändern. Bei Referenzen halte ich es aber durchaus für angemessen.
Jup, dieses const koennte den Code einer Funktion unnoetig komplizieren.

6

21.07.2010, 12:07

Danke schon mal für die Antworten.

Wie sieht es eigl. mit der Leistung aus?
Die Strukturen und Klassen übergebe ich als Referenz um das Kopieren zu vermeiden, was ja Leistung spart, ist das egal bei
den normalen Datentypen?
Und ich habe schon ein paar mal gesehen, dass bei den Gettern die Structuren und Klassen nicht als Referenz zurückgeben wird.
Was ist denn nun besser?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

21.07.2010, 12:32

Skalare Werte-Typen würde ich direkt als Wert übergeben, Strukturen und Klassen als Referenzen, sofern wirklich keine Kopie, sondern nur die Instanz benötigt wird. Letzteres ist also dem Verwendungszweck unterworfen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

8

21.07.2010, 13:44

Bei Rückgaben kann schnell ein Problem entstehen, wenn man einen Verweis auf eine nur lokal existierende Variable verweist:

A& get_a(void) const { A a; return a; }

Sollte mindestens eine Warnung erzeugen, da a nach dem Block aufhört zu existieren und die Referenz daher nicht mehr definiert funktioniert (afaik).
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

9

21.07.2010, 14:05

Ja, das mit der Warnung ist mir auch so im Gedaechtnis

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

21.07.2010, 14:39

Bei Rückgaben kann schnell ein Problem entstehen, wenn man einen Verweis auf eine nur lokal existierende Variable verweist:
So etwas macht man ja auch nicht, außer man will direkt Exploits/Bugs einbauen ;)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige