C++ und Typesicherheit
-
rüdiger schrieb:
int main() { double n = 10.0; printf("%s", n); // vs. cout << n; }Und static_cast würde in c++ meckern wenn ptr nicht auf ein A zeigen sollte oder?
Nee.
Sorry meinte: Und static_cast würde in c++ meckern wenn ptr nicht auf ein B zeigen sollte oder?
Und das in printf mit %s funktioniert für ein double oder wie ?
Und gibt es noch andere wichtige codeteile wo man die typesicherheit von c++ gegenüber c sieht?
-
In dem Teil des Typsystems, der in C und C++ existiert (also Wandlung von Zeigern, structs und Elementartypen wie Integern oder doubles) gibt es genau einen Unterschied in der 'Strenge' der Typisierung, wenn man so will und das ist die unterschiedliche Behandlung des void-Zeigers.
Das I/O-System ist ein ganz anderer Punkt, fputs als Vertreter für C funktioniert auch einwandfrei und 'typsicher'. printf funktioniert in C++ auch falsch. Das hat nichts mit der Strenge der Typisierung, sondern mit dem darunterliegenden Mechanismus zu tun. C kennt einfach keine Templates oder abgeleiteten Klassen, so etwas kann man also auch nicht bezüglich der Typenkorrektheit vergleich, weil C die Typen schon gar nicht kennt. Darum ist die Aussage, C++ sei typensicherer als C genaugenommen ziemlicher Unfug. Man hat in C++ nur andere Sprachmittel zur Verfügung, damit man mit Zeigerarithmetik oder Formatstrings nicht mehr rumwursteln muß, was evtl. Fehler vermeidet. Das macht C++ aber nicht zu einer streng typisierten Sprache -- das ist es nämlich einfach nicht.
-
neuman schrieb:
Und das in printf mit %s funktioniert für ein double oder wie ?
Eben nicht.
-
Daniel E. schrieb:
In dem Teil des Typsystems, der in C und C++ existiert (also Wandlung von Zeigern, structs und Elementartypen wie Integern oder doubles) gibt es genau einen Unterschied in der 'Strenge' der Typisierung, wenn man so will und das ist die unterschiedliche Behandlung des void-Zeigers.
Das I/O-System ist ein ganz anderer Punkt, fputs als Vertreter für C funktioniert auch einwandfrei und 'typsicher'. printf funktioniert in C++ auch falsch. Das hat nichts mit der Strenge der Typisierung, sondern mit dem darunterliegenden Mechanismus zu tun. C kennt einfach keine Templates oder abgeleiteten Klassen, so etwas kann man also auch nicht bezüglich der Typenkorrektheit vergleich, weil C die Typen schon gar nicht kennt. Darum ist die Aussage, C++ sei typensicherer als C genaugenommen ziemlicher Unfug. Man hat in C++ nur andere Sprachmittel zur Verfügung, damit man mit Zeigerarithmetik oder Formatstrings nicht mehr rumwursteln muß, was evtl. Fehler vermeidet. Das macht C++ aber nicht zu einer streng typisierten Sprache -- das ist es nämlich einfach nicht.
Danke für die ausführliche Antwort.
Mr. N schrieb:
neuman schrieb:
Und das in printf mit %s funktioniert für ein double oder wie ?
Eben nicht.
Und was ist dann an dem beispiel von rüdiger so besonders.
Mein Frage lautete ja:
neuman schrieb:
Hast du auch ein beispiel für cout und printf, wo deutlich wird das cout sicherer/typesicherer ist?
Und dann kam dieser Code:
int main() { double n = 10.0; printf("%s", n); // vs. cout << n; }
-
Achso oder meinst du man könne %s für ein double nehmen und es kompiliert trotzdem was aber nicht sicher ist???
-
neuman schrieb:
Achso oder meinst du man könne %s für ein double nehmen und es kompiliert trotzdem was aber nicht sicher ist???
Richtig.
-
OK

Wenn mich jetzt irgendwann einer mal fragen sollte:"C++ ist eine typesicher sprache. kannst du mir sagen was das genau bedeutet?"Wie könnt ich darauf am schönsten antworten ihn zwei kurzen sätzen oder ist das von Daniel E. schon die perfekte und kürzeste antwort drauf?
-
neuman schrieb:
OK

Wenn mich jetzt irgendwann einer mal fragen sollte:"C++ ist eine typesicher sprache. kannst du mir sagen was das genau bedeutet?"Wie könnt ich darauf am schönsten antworten ihn zwei kurzen sätzen oder ist das von Daniel E. schon die perfekte und kürzeste antwort drauf?
Wie wärs damit:
"C++ ist keine notwendigerweise typsichere Sprache, man kann es aber typsicher benutzen. Man kann also dafür sorgen, dass man Datenobjekte immer nur als solche mit kompatiblem Typen behandelt."
-
neuman schrieb:
OK

Wie könnt ich darauf am schönsten antworten ihn zwei kurzen sätzen oder ist das von Daniel E. schon die perfekte und kürzeste antwort drauf?solange du das typsystem nicht absichtlich aushebelst wird der compiler verhindern, dass du irgendeine schweinerei begehst.
-
Aja, danke für die zwei letzten antworten.
Tolles Forum danke an alle.