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

11

20.04.2006, 23:34

Zitat von »"koschka"«

Es schadet nie auf Typkonverterungen zu achten. Besonders bei solchen Fällen, so gewöhnt man sich dran und macht nicht weitere (logischen) Fehler.


Grundsätzlich stimme ich dir da zu.

Zitat von »"koschka"«


Ich glaube wir brauchen uns deshalb nicht zu streiten was muss und was unter Umständen kann. Mit der Variante unten ist es eineindeutig klar und genau darum gings mir.


Ist eine Frage des persönlichen Stils. Ich würde es an der Stelle nicht machen um den Code leserlicher zu halten.

Aber wurscht, mir ging es um die, so nicht richtige Behauptung, dass er etwas illegales gemacht hat. Wir wollen ja hier keine falschen Dinge stehen lassen, oder?

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

12

21.04.2006, 08:16

für mich ist sowas wesentlich losischer, es steht ja explizit da das man ein Int erwartet und man muss so keinen weiteren Gedanken daran verschwenden ;)

Das mit der Behauptung ("Hier nur mal eine Fehlerquelle zu nennen") hast du denke ich etwas falsch verstanden, ich meinte es sei nur wesentlich besser so.

C-/C++-Quelltext

1
2
3
4
5
6
void Steigerung (int Strengh, int Agility)

{
Strengh = (int)(Strengh/10) + Strengh;
Agility = (int)(Agility/10) + Agility;
}
:huhu:

Anonymous

unregistriert

13

21.04.2006, 09:43

Zitat von »"koschka"«

@Kalo
@Pointer.

Mit Pointern kann man noch ne ganze menge anderer Sachen noch machen (Thema dynamische/rekursive Datentypen), die man nicht mit Referenzen machen kann. Referenzen braucht man eigentlich gar nicht, aber es macht sich vieles mit ihnen einfacher.


Ich gehöre auch zu den Leuten die lieber Referenzen als Pointer nutzen - demnach ist es besser alles was man sonst mit Referenzen gemacht hat auch mit pointern zu machen?

wozu gibts die referenzen überhaupt wenn der pointer die bedingslos ersetzt und noch mehr kann?

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

14

21.04.2006, 13:34

Wie gesagt man kann mit Pointern alles machen, und für viele (wie mich) sind es auch oft das Mittel der Wahl. Referenzen haben den Vorteil das man oft viel weniger nachdenken muss was man nun referenzieren bzw. dereferenzieren muss um auf den gewünschten Wert zu kommen, dadurch ist wesentlich weniger Quelltext fehleranfällig.

Referenzen werden auch oft von vielen Anfänger benutzt, da diese meist Pointer scheuen (was kein Grund ist).

besondere Datenstrukturen siehe oben können aber nur mit Pointer gemacht werden, und wer einmal das drauf hat, wird Pointer auch in jeder anderen Sprache (wo es keine gilbt) missen. Pointer haben aber auch ein großes Problem, und das ist das sehr viele vergessen den Pointer vorher auf NULL zu setzen und so ungültige Operationen ausführen wollen, was zu Fehlern führt. Referenzen sind indessen sehr einfach in der Anwendung und führen auch sehr selten zu Fehlern. Das ist wohl der Hauptgrund.

@Threadersteller:
Deine Frage beantwortet?

15

21.04.2006, 13:57

Also in C++ für Spieleprogrammierer steht, dass man Referenzen verwenden soll wenn man größere Datenmengen einer Funktion übergeben will, diese aber nicht von der Funktion verändert werden.
Ich gebe bei der Arbeit immer 100%

6% Montags
30% Dienstags
35% Mittwochs
25% Donnerstag
4% Freitag

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

16

21.04.2006, 14:26

Ich hab auch mal irgendwo gelesen, dass es eine Regelung ist, an die man sich halten kann, Pointer zu verwenden, wenn die Werte verändert werden und Referenzen, wenn die Werte nicht verändert werden. So weiß jemand der die Funktion nutzt gleich, ob die Daten verändert werden.
Allerdings ist das keine Pflicht sondern eine Stilfrage.

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

17

21.04.2006, 22:34

@Abnfänger das hat damit nicht direkt etwas zu tun. Es ist imemr besser Adressen zu übergeben, ob nun mittels Pointern oder Referenzen ist wurscht.

18

22.04.2006, 14:57

Ja ich meine damit ja nur, wenn man größere Datenmengen übergeben will und man von vorne herein weiß, dass der Wert von der Funktion nicht verändert werden soll, dann wäre es übersichtlicher eine konstante Referenz zu benutzen als einen Zeiger zu benutzen. Aber wenn der Wert verändert wird sollte man einen Zeiger benutzen, weil man beim benutzen der Funktion unter umständen sonst nicht sieht das es sich um eine Referenz handelt und dies zu fehlern führen kann.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
//...


int main ()
{
     int Variable;

     Funktion (Variable); // Hier sieht man nicht sofort, dass der Wert von der Funktion verändert werden kann


     Funktion2 (&Variable); // Hier schon


     return 0;
}


also ist es sicherer wenn man konstante Referenzen benutzt
Ich gebe bei der Arbeit immer 100%

6% Montags
30% Dienstags
35% Mittwochs
25% Donnerstag
4% Freitag

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

19

22.04.2006, 16:37

Ein weiterer Vorteil von konstanten Referenzen gegenüber nicht konstanten: man kann neben Variablen auch Werte übergeben.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
// Funktion:

int foo(int& i);

// Aufruf:

foo(1); // Fehler


//////////////////////////////////

int foo(const int& i);

foo(1); // Es wird eine Referenz auf die Konstante 1 erstellt.

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

20

22.04.2006, 16:51

Eine konstande Referenz ist in euren Beispielen absoluter Humbug, sie macht nur bei großen Objekten (z.B. Texturen) sinn, wo man aber eh Listen, Trees etc. hat und damit Pointer.

Eine int Varibale zu übergeben ist für einen heutigen Rechner kein Problem. Dadurch würde ich die Beispiele eher als unangebracht sehen, da sie den Code nur schlechter lesbarer machen.

Werbeanzeige