StrToInt() vs. AnsiString::ToInt()
-
Hallo,
ich habe gerade diverse Beiträge gelesen und immer wieder bei der Konvertierung von AnsiString in Integer Code wie den folgenden gefunden:
int nZahl = StrToInt(Edit1->Text);
Dabei hat AnsiString doch eine eigene Methode für diesen Zweck:
int nZahl = Edit1->Text.ToInt();
Hat StrToInt() irgendwelche Vorteile oder ist das reine Willkür?
Viele Grüße,
Christian
-
intern werden wohl beide sowieso nur 'atoi' benutzen
-
Man hat halt nicht immer einen AnsiString, möchte ggf. aber trotzdem den Komfort von ToInt (Exception bei Fehler) oder z.B. ToIntDef nutzen.
int x = StrToInt("12345");
Es ginge zwar auch mit
int y = String("12345").ToInt();
aber da ist StrToInt doch eleganter.
ten schrieb:
intern werden wohl beide sowieso nur 'atoi' benutzen
Nö, intern wird die Delphi- bzw. ObjectPascal-Funktion Val verwendet.
-
Christian Sonder schrieb:
Hat StrToInt() irgendwelche Vorteile oder ist das reine Willkür?
Da in Delphi Strings keine Klassen, sondern native Objekte sind, keine Methoden haben und daher von externen Funktionen modifiziert werden müssen, dürfte es sich bei StrToInt() einfach um die in Delphi gebräuchliche und zwecks Kompatibilität auch für C++Builder verfügbare Konvertierungsfunktion handeln. AnsiString::ToInt() ist eben die praktische Nutzung der Tatsache, daß AnsiString in C++ eine Klasse ist.
-
Es gibt auch in Delphi Klassen (sie heißen dort Objekte, glaube ich) und es gibt dort auch eine Stringklasse (String).
-
Braunstein schrieb:
Es gibt auch in Delphi Klassen
Schon klar
Braunstein schrieb:
und es gibt dort auch eine Stringklasse (String).
Nein, string ist in Delphi ein eingebauter Datentyp und keine Klasse. Daher kann man, wie ich bereits schrieb, auch keine Methoden aufrufen, sondern muß ihn mit externen Funktionen behandeln.
procedure foo; var bar: String; begin // bar.ToInt (); // geht nicht, da String keine Klasse ist StrToInt (bar); // so ist es richtig end;
-
Ok, das hatte ich dann irgendwie falsch interpretiert.
Danke für die Aufklärung.