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

23.06.2009, 10:54

Zitat von »"WhiteMike"«

Ich finde es trotzdem keinen Fehler, wenn man verhindern will, dass man den Parametern neue Werte zuweist. Das macht nämlich genauso wenig Sinn, falls es keine out-Parameter sind.
Nochmals: Es geht um Kopien. Man erreicht mit dem const nichts. Man kann weder verhindern, dass Kopien angelegt werden, noch sonst was bewirken. Wieso sollte man nicht der Funktion überlassen, ob sie die kopierten Parameter verändern darf?

12

23.06.2009, 12:00

Ick hab dett mal von "Mal wieder was Lustiges" abjetrennt, wa!?
fka tm

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

13

23.06.2009, 12:38

Zitat von »"Nexus"«

Als Rückgabetyp bringt es sogar noch weniger, da skalare RValues generell nicht geändert werden dürfen. Hier wäre int gleichwertig.

C-/C++-Quelltext

1
const int function();


Das stimmt in dem Fall. Allerdings muss man auch hier relativieren. Folgendes Beispiel:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class vector
{
public:

  float x;
  float y;

  vector() {}

  vector(float _x, float _y)
    : x(_x), y(_y)
  {
  }

  vector operator +(const vector& b) const
  {
    return vector(x + b.x, y + b.y);
  }

};


int main()
{
  vector a, b;
  (a + b) = vector(1, 1);
}


Der operator +() sollte hier unbeding einen const vector returnen um sowas wie in main() dargestellt zu verhindern...

FalkT

Treue Seele

Beiträge: 125

Wohnort: AC

  • Private Nachricht senden

14

23.06.2009, 17:26

Zitat von »"WhiteMike"«

Gibt es da nicht diesen Tipp, dass man an jeder möglichen Stelle ein const setzen sollte, wo es reinpasst?


Hast sich hier jemand überhaupt gefragt warum man das machen sollte.
Klar ist es praktisch wenn man nichts ändern kann etc., doch steckt mehr dahinter ?

Die Antwort ist ja !

Man nehme ein Projekt X ohne const-Funktionen, dann schreibt man es um, so dass alles was gut und sinnvoll ist auch const ist.

Resultat: Projekt-X-const ist durchschnittlich ca. 10-15% schneller als das Projekt-X ohne const. Diese Zahl stammt nicht von mir selbst, ich zitiere hier nur.

Fakt ist, der Compiler kann sehr viel besseren Code erzeugen, da potentielle Speicherzugriffe entfallen. Ein Stichwort ist hier Cache-WB.

Mag natürlich früher noch wichtiger gewesen sein als heute.
Man ist jedoch immer wieder überrascht, was der moderne 4er-GCC doch alles wegoptimiert. Je nach Compiler bringt const dementsprechend unterschiedliche Speed-Vorteile.

ChrisJ

Alter Hase

Beiträge: 487

Wohnort: Schweich

Beruf: Schüler

  • Private Nachricht senden

15

23.06.2009, 19:17

man sollte const eigentlich nur verwenden, um den benutzer einer methode/funktion vor dummen fehlern zu schützen. da bei den meisten hobbyprojekten der benutzer auch der autor ist, kann man das const meistens auch weglassen. wayne.
"Don't trust your eyes: They are a hell of a lot smarter than you are"

the[V]oid

Alter Hase

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

16

23.06.2009, 20:05

Das was FalkT geschrieben hat stimmt aber schon.
<< an dieser Stelle ist eine Signatur verstorben >>

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

17

23.06.2009, 20:08

Zitat von »"WhiteMike"«

In der Schnittstelle musst du das const sowieso nicht angeben, wenn es dich stört.

Ich finde es trotzdem keinen Fehler, wenn man verhindern will, dass man den Parametern neue Werte zuweist. Das macht nämlich genauso wenig Sinn, falls es keine out-Parameter sind.
Letztendlich ist es auch nur der Stil.


Es kann durchaus im Sinn der Implementierung sein die Parameter zu verwenden und zu ändern und die Möglichkeit sollte bestehen bleiben.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

18

23.06.2009, 20:27

Zitat von »"ChrisJ"«

man sollte const eigentlich nur verwenden, um den benutzer einer methode/funktion vor dummen fehlern zu schützen. da bei den meisten hobbyprojekten der benutzer auch der autor ist, kann man das const meistens auch weglassen. wayne.


Ganz und gar nicht. Wie bereits gesagt wurde ist const auch ein wichtiger Hinweis für den Compiler der zu effizienterem (d.h. schnellerem) Code führen kann...

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

19

23.06.2009, 20:30

Vorallem neigen manche programmierende Benutzer dazu Dinge unglaublich schnell zu vergessen (z.B. ich :lol: ).
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.

ChrisJ

Alter Hase

Beiträge: 487

Wohnort: Schweich

Beruf: Schüler

  • Private Nachricht senden

20

23.06.2009, 20:36

das "wayne" sollte folgendes bedeuten: als hobbyprogrammierer in zeiten von mehrkern-cpus kümmer ich mich nicht um irgendwelche low-level-optimierungen, wenn ich in der zeit, die ich für die perfekte const-correctness brauche, auch drei funktionen implementieren kann, die auf jeder cpu, die in den letzten drei jahren rauskam, immer noch flüssig laufen. wenn ich irgendwann zeit habe auch die letzte logfile-methode in asm zum implementieren, dann - auch nur dann - kümmer ich mich um 100%ige const-correctness :)
"Don't trust your eyes: They are a hell of a lot smarter than you are"

Werbeanzeige