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

birdfreeyahoo

Alter Hase

  • »birdfreeyahoo« ist der Autor dieses Themas

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

1

19.10.2014, 09:05

Const-correctness

Hallo, ich habe eine Frage:
Wie wichtig ist const-correctness, also bringt es mir sehr viel überall const hinzuschreiben wo es passt?
In letzter Zeit versuche ich sehr darauf zu achten. Alle Zwischenschritte von Rechnungen sind z.B. const.

Oder auch "Verknüpfungen":

C-/C++-Quelltext

1
2
3
APlayerController* const PC = Cast<APlayerController>(Controller);

...


Hab ich wirklich einen Nutzen wenn ich das konstant fortführe?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

19.10.2014, 09:12

Je mehr Sachen const sind, desto weniger Seiteneffekte kannst Du produzieren. Das ist generell immer gut, da es weniger potentielle Fehler bedeutet.
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]

birdfreeyahoo

Alter Hase

  • »birdfreeyahoo« ist der Autor dieses Themas

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

3

19.10.2014, 09:18

Gibt es da auch Optimierungen hinsichtlich der Laufzeit?

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

4

19.10.2014, 11:33

Nein. Der Compiler ignoriert nach meinem Wissen const völlig bei der Optimierung.

const ist wie public, protected, private nur ein Helfer für den Programmierer, nicht für den Compiler. Du solltest es auch so nutzen.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

5

19.10.2014, 12:05

C-/C++-Quelltext

1
APlayerController* const PC = Cast<APlayerController>(Controller);

Sicher, dass du eine konstante Adresse und kein konstantes Objekt willst?
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

19.10.2014, 13:20

Das kann durchaus so sein. Swift macht ja z.B. einen Unterschied zwischen "let" und "var", der nicht ganz schlecht ist. Allerdings ist es bei C++ etwas overkill da überall const an Variablen ranzuschreiben.
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]

LukasBanana

Alter Hase

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

7

19.10.2014, 13:43

Gibt es da auch Optimierungen hinsichtlich der Laufzeit?

Glaube ich auch eher weniger.
In dem Optimierungs Verfahren Sparse Conditional Constant Propagation (SCCP) werden alle Variablen auf ihre 'Konstantheit' untersucht, egal ob da ein "const" dabei steht oder nicht.
D.h. wenn eine Variable nur einmal geschrieben wird, wird sie der Compiler als Konstante entsprechend optimieren.

birdfreeyahoo

Alter Hase

  • »birdfreeyahoo« ist der Autor dieses Themas

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

8

19.10.2014, 13:52

Also verwende ich const nur für Konstanten und nicht für Werte die konstant sind weil es halt so kommt.

@Steef: Ja, weil das genau dieses Objekt und kein anderes darstellen soll. Das Objekt an sich ist nicht konstant, aber es soll halt dieses sein.

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

9

19.10.2014, 15:16

Es gibt weitere Fälle in denen "const" sehr empfehlenswert ist. Das wohl berühmteste Konstrukt ist die konstante Referenz.
Oder als Beispiel zum Beispiel die Daten lesen aber nicht schreiben. Zum Beispiel "memcpy". Dort hat es sogar positiven Effekt auf beiden Seiten: In der Funktion um zur Compile time sicher zustellen, dass die Daten garantiert nicht verändert werden und außerhalb der Funktion, um den Programmierer zu signalisieren, dass der Wert nicht verändert wird. Das gilt insbesondere für Member-Funktionen. In einem Spiel könnte man zum Beispiel die Speicher oder Zeichenfunktionen als konstant machen und so sicherstellen, dass der Spielstatus damit nicht (mgl. versehentlich) geändert wird. Der positive Effekt propagiert auch nach außen. Es ermöglicht nämlich das darauf aufbauender Code "const" sein kann. Zum Beispiel die nahtlose Verwendung einer Konstante für eine solche Funktion. Wenn man versucht Const-Correctness auszuhebeln, ist es gelegentlich auch ein Hinweis auf einen Designfehler.

Es gibt zwei Fälle in denen sich "const" nur lokal auswirkt, und das sind (logischerweise) lokale Variablen und Value Parameter. Dort ist der Effekt ausschließlich auf die Funktion selbst beschränkt und kann auch keine Const-Correctness-Probleme auslösen. Abgesehen von diesem unsicheren Fall, empfehle ich sonst sehr stark, "const" zu verwenden.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

19.10.2014, 17:51

Was dann die lange Beschreibung von "es gibt keine Seiteneffekte" wäre...
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