Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - const - Datentyp angeben?
galagher - Fr 03.10.08 17:44
Titel: const - Datentyp angeben?
Hallo!
Kann mir jemand sagen, warum beides gültig ist und ob es da einen Vor- bzw. Nachteil gibt?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| const clWindowColor = $00E8E8E8; sNotFound = 'Nicht gefunden: '; const clWindowColor = TColor($00E8E8E8); sNotFound = String('Nicht gefunden: '); |
Hat die Angabe des Datentyps irgendeinen Vorteil?
Delete - Fr 03.10.08 17:47
So wie es da steht ist es ein (unnötiger) Cast in den entsprechenden Datentyp.
galagher - Fr 03.10.08 18:25
DeddyH hat folgendes geschrieben : |
So wie es da steht ist es ein (unnötiger) Cast in den entsprechenden Datentyp. |
Ok, danke. Das wollte ich wissen!
Hidden - Fr 03.10.08 19:18
Hi,
Wenn du willst, dass die Konstante nicht den Standard-Datentyp hat, musst du das übrigens so machen:
Delphi-Quelltext
1: 2: 3: 4:
| const HalloWelt: String = 'HiHo'; clWindowColor: TColor = $00E8E8E8; EndOfPost: PChar = 'mfG,'; |
mfG,
Yogu - Fr 03.10.08 19:23
Auch bei PChars brauchst du Konstanten nicht casten. Entweder macht das Delphi automatisch, oder es ist einfach egal - ich weiß es nicht, aber es funktioniert.
galagher - Fr 03.10.08 21:00
Ich habe nur so aus Interesse getestet, was passiert, wenn man den Datentyp angibt. Und da sich nichts - weder beim Kompilieren noch im Programm - änderte, wollte ich eben wissen, ob das Sinn hat!
Danke noch mal!
Horst_H - Fr 03.10.08 21:22
Hallo,
normalerweise werden Fliesskommakonstanten als extended gespeichert und das ist bei vielen Schleifendurchläufen hinderlich, falls man sonst nur double nutzt.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| {$APPTYPE console} const TestCOnst = 1.0; begin writeln(TestConst,' ', sizeof(TestConst) ); end. 1.0000000000000000E+0000 10 |
Gruß Horst
BenBE - Sa 04.10.08 00:14
Man sollte zudem beachten, dass Konstanten, die wie folgt deklariert sind:
Delphi-Quelltext
1:
| const ChangeMe: Integer = 42; |
je nach Compiler-Einstellung Writeable sind, man also legitim auch
schreiben darf ;-) Und dabrauch man noch nicht mal Pointer-Foo für betreiben ;-)
Yogu - Sa 04.10.08 12:42
BenBE hat folgendes geschrieben : |
Man sollte zudem beachten, dass Konstanten, die wie folgt deklariert sind: [...] je nach Compiler-Einstellung Writeable sind |
Das heißt dann, dass
Delphi-Quelltext
1:
| const ChangeMe: Integer = 42; |
das gleiche ist wie
Delphi-Quelltext
1:
| var ChangeMe: Integer = 42; |
Da verstehe ich jetzt nicht wirklich den Nutzen dahinter. :gruebel:
BenBE - Sa 04.10.08 12:50
Das ist AFAIK eine Kompatibilitätseinstellung, die per Default ausgeschaltet ist. Wenn sie eingeschaltet ist, bekommt man für Schreibzugriffe auf Konstanten IIRC jedoch eine Warnung angezeigt.
Wo so etwas wichtig sein kann, ist wenn man bestimmte Datenstrukturen hat, die zwar Konstant sind, wo man jedoch keinen geschlossenen Ausdruck zu deren Definition hinschreiben kann. Ein einfaches Beispiel für soetwas ist z.B. wenn man auf Adressen anderer Variablen zugreifen muss (Speicherstrukturen), wo etwas mehr Arithmetik notwendig ist, oder man die Adresse anderer Konstanten einbeziehen muss in Daten. Diese Konstanten kann man dann im
initialization-Abschnitt einer Unit initialisieren, ohne dass man auf den Vorteil von Const (nämlich die Zwischenspeicherung und einige Compiler-Optimierungen) verzichten muss.
Hidden hat folgendes geschrieben : |
höchstens, dass lokale Variablen nicht initialisierbar sind.. Dann ginge das eben doch - indem man seine Variable als Konstante deklariert :nut: |
Dafür sollte man das nicht einsetzen, da das Nebeneffekt-Programmierung ist ;-)
Hidden - Sa 04.10.08 12:50
höchstens, dass lokale Variablen nicht initialisierbar sind.. Dann ginge das eben doch - indem man seine Variable als Konstante deklariert :nut:
E: Bezog sich noch nicht auf BenBes Post
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!