Frage zum Speichern & Laden von Datein
-
LOL, wer hat den bitte sowas erfunden ?!, das ist doch total sinnlos

Wenn ich const haben will, dann will ich auch const haben

Aber ok 'leuchtet ein'^^...
PS: Einer meiner Compiler meckert auch bei deiner ersten Funktion (MVC++ 6.0)
-
CodeFinder schrieb:
LOL, wer hat den bitte sowas erfunden ?!, das ist doch total sinnlos

Wenn ich const haben will, dann will ich auch const haben

Nö, macht doch nur, was man ihm sagt
const char *constant; char *not_constant = ( char* ) constant;er wandelt "const char*" nach "char*". Der eigentliche Pferdefuß ist der, daß sowas in C mal eben so aus versehen passiert. In C++ ist es wegen des const_cast< > operators nicht mehr möglich, sich "aus versehen" in's Knie zu schießen. Dazu braucht's dann halt 'ne gehörige Portion Absicht.

CodeFinder schrieb:
[...] Einer meiner Compiler meckert auch bei deiner ersten Funktion (MVC++ 6.0)
Das ist auch gut so! Aber denkst du nicht, du solltest ihn dann mal "in Frieden ruhen" lassen!?
Greetz, Swordfish
-
obwohl die beschränkung, dass von den template-style casts nur const_cast in der lage ist, const-qualifikation wegzucasten, wichtig ist, so ist doch ein C-style cast noch in anderer hinsicht etwas ganz anderes als ein static_cast.
als faustregel gilt, dass mit static_cast alle die konvertierungen möglich sind, die auch implizit erlaubt sind, sowie deren umkehrungen (mit ausnahme des wegcastens von const)
ein C-style cast hat, in derselben situation angewandt, denselben effekt. er erlaubt allerdings noch weitere konvertierungen: solche, die ein static_cast mit einem const_cast kombinieren. und solche, die sonst nur mittels reinterpret_cast (ggf. ergänzt mit const_cast) möglich sind. das bedeutet, dass ein bestimmter ausdruck, der einen c-style cast enthält, möglicherweise kontextabhängige bedeutung hat (was eigentlich immer schlecht ist). beispiel:struct A; struct B; B* foo(A* p) { return (B*)p; } // reinterpret_cast<B*>(p); struct A {}; struct B: A {}; B* foo(A* p) { return (B*)p; } // static_cast<B*>(p);das schlimme daran ist, dass ein compiler hier nicht einmal warnt, wenn der cast al s reinterpret_cast interpretiert wird.
-
Swordfish schrieb:
Nö, macht doch nur, was man ihm sagt
Ja, klar macht er, was man ihm sagt...aber findest du die Idee eines const-Casts sinnvoll (mal davon abgesehen der ein const-Cast in C++ offentlichtlicher ist) ? - Hast du den jemals verwendet ?

Also irg.-wie strebt der gegen meine Logik

Swordfish schrieb:
Das ist auch gut so! Aber denkst du nicht, du solltest ihn dann mal "in Frieden ruhen" lassen!?
Greetz, Swordfish
Jo auf jeden Fall
naja der Comp. is sowieso voller Bugs... 
PS: Danke nochmal für das erläuternde Beispiel bzgl. C/C++ und const-Casts

-
CodeFinder schrieb:
Ja, klar macht er, was man ihm sagt...aber findest du die Idee eines const-Casts sinnvoll (mal davon abgesehen der ein const-Cast in C++ offentlichtlicher ist) ? - Hast du den jemals verwendet ?

Also irg.-wie strebt der gegen meine Logik

Ja, ist praktisch, wenn man an Code von anderen darf, die keine Ahnung von const correctness haben.
-
Michael E. schrieb:
CodeFinder schrieb:
Ja, klar macht er, was man ihm sagt...aber findest du die Idee eines const-Casts sinnvoll (mal davon abgesehen der ein const-Cast in C++ offentlichtlicher ist) ? - Hast du den jemals verwendet ?

Also irg.-wie strebt der gegen meine Logik

Ja, ist praktisch, wenn man an Code von anderen darf, die keine Ahnung von const correctness haben.
Bezug ?

-
Beispiel:
// foo.h (gehört zu ner Lib) void print(Bar &b) { cout << b; } // end of foo.h // baz.cpp #include "foo.h" #include "bar.h" const Bar bar(42); print(bar); // error, shit! print(const_cast<Bar>(bar)); // klappt :)Die Funktion print() aus ner externen Lib übernimmt kein konstantes Bar-Objekt, obwohl sie es nicht verändert. Wenn ich jetzt wie in baz.cpp ein konstantes Objekt hab, meldet mir der Compiler beim Aufruf von print(bar) einen Fehler.