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

20.11.2003, 10:04

Const

Hat es irgendeinen tieferen Sinn, dass bei manchen Funktionen die Parameter als const deklariert sind? Bei Pointern und Referenzen verstehe ich das ja noch, aber was bringt das z.b. bei Int? Ich glaube die Random Funktionen machen das. Also sowas wie:

Funktion ( const int a, const int b )

was spricht denn gegen

Funktion ( int a, int b )?

Ist ja so oder so eine Kopie der Werte.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

20.11.2003, 10:16

Damit versichert man dem Compiler, dass auch die Kopien der Werte innerhalb der Funktion nicht verändert werden, könnte Optimierungen ermöglichen... mittlerweile hab ich's mir aber wieder abgewöhnt.

3

20.11.2003, 10:24

Ach so. Das ist interessant. Wo wir gerade bei Optimierungen sind, wäre es dann nicht sinnvoll bei Methoden wie

float tbFont::ComputeTextWidth(const char* pcText,
int iLength, // = -1
const float fSpace)

aus dem "const char* pcText" ein "const char * const pcText" zu machen?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

20.11.2003, 11:03

Könnte man...
Aber jemand meinte mal, dass diese Art der Optimierungen eigentlich garnichts bringen.

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

5

20.11.2003, 13:54

Zitat von »"David Scherfgen"«

Könnte man...
Aber jemand meinte mal, dass diese Art der Optimierungen eigentlich garnichts bringen.


Das ist unsinn!

es besteht ein großer unterschied zwischen:

const char const *Text = "Bla";

und

const char *Text ="Bla";

wenn ich heute abend zeit habe, sage ich ihn euch genau, steht im Buch "Effektiv C++ Programmieren" von "Scott Meyers". Werd dann mal ein bischen rausschreiben :)

Sorry hab grade derbsten stress :)

6

20.11.2003, 16:25

Da steht zwar drin, das man const benutzen soll, aber nicht weil es schneller ist.

7

20.11.2003, 18:09

Quellcode

1
2
3
4
5
6
7
8
9
int f(const int i)
{
    return i + 5;
}

int main()
{
    int x = f(3);
}


Ein guter compiler würde glaube ich das einfach als int x = 8 ansehen
Bin mir aber net sicher.
Ein Gespenst geht um in Europa...

Jumping Jack

Treue Seele

Beiträge: 142

Wohnort: Hamburg

Beruf: Schüler

  • Private Nachricht senden

8

20.11.2003, 20:44

Zitat


Ein guter compiler würde glaube ich das einfach als int x = 8 ansehen


Und ohne const nicht oder wie?

9

21.11.2003, 00:01

Zitat

es besteht ein großer unterschied zwischen:

const char const *Text = "Bla";

und

const char *Text ="Bla";

Falls ich mich jetzt nicht vertuh, liegt der Unterschied daran das beim ersten Beispiel sowohl der Pointer als auch dessen Inhalt nicht veraendert werden kann. Also beides "const".
Beim zweiten Beispiel ist jedoch nur der Pointer "Text" geschuetzt.

Generell sollte man sich immer angewoehnen "const" zu Benutzen wo immer es auch geht. Das gilt nicht nur Parameter sondern auch fuer Methoden (Ich meine Methoden und nicht Funktionen ;) ). Das hat nicht nur den Sinn das der Compiler moeglicherweise Optimierungen vornehmen kann, sondern auch den Sinn das der Benutzer weis das die Werte die man angibt nicht veraendert werden, oder das die Methode die Eigenschaften der Klasse nur liest.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

10

21.11.2003, 13:26

Zitat von »"DragonMaster"«


Falls ich mich jetzt nicht vertuh, liegt der Unterschied daran das beim ersten Beispiel sowohl der Pointer als auch dessen Inhalt nicht veraendert werden kann. Also beides "const".
Beim zweiten Beispiel ist jedoch nur der Pointer "Text" geschuetzt.

Genau. Der Pointer ist konstant, d.h. er kann immer nur auf die gleiche Adresse zeigen.
Und der Wert auf den er zeigt kann auch nicht verändert werden.

Zitat von »"DragonMaster"«


Generell sollte man sich immer angewoehnen "const" zu Benutzen wo immer es auch geht. Das gilt nicht nur Parameter sondern auch fuer Methoden (Ich meine Methoden und nicht Funktionen ;) ). Das hat nicht nur den Sinn das der Compiler moeglicherweise Optimierungen vornehmen kann, sondern auch den Sinn das der Benutzer weis das die Werte die man angibt nicht veraendert werden, oder das die Methode die Eigenschaften der Klasse nur liest.

*unterstreich*
1. Optimierung
2. Weniger Fehlermöglichkeiten
-> guter Stil
Ein Gespenst geht um in Europa...

Werbeanzeige