Wie caste ich ordentlich int zu bool?
-
Da könnte man auch dagegenhalten, dass jemand, der weiß was er tut, keine C-Casts verwendet
-
:p gilt aber auch für andere casts.
der compiler sollte einfach davon ausgehen, dass er dem programmierer vertrauen kann
-
Dann muss man einfach alle Warnungen deaktivieren
-
ich verstehe die ganze Diskussion garnicht...
int i;
bool b = i;compiliert mir der g++ ohne Warnung (mit -W -Wall), und ich wüsste auch nicht wieso das irgendein Compiler nicht machen sollte
-
das sage ich ja schon die ganze zeit... aber wenn wir schonmal dabei sind wie wärs wenn man schleifen mithilfe von gotos und makros implementiert... es scheint ja mode zu sein umständliche lösungen zu suchen für probleme die es garnicht gibt...
-
personenkult hat das Problem aber anscheinend.
-
personenkult schrieb:
habe das immer bisher so gemacht
int i = 1; bool foo = (bool)i;
klar gibt das ein "problem" weil sich der compiler am c style cast stört. aber wenn man den weg lässt gibt es da nix mehr zu motzen...
-
Das ist dann aber ein ziemlich dummer Compiler. Ein Cast signalisiert doch eher, dass man grad weiß was man tut, als eine implizite Umwandlung.
-
japro schrieb:
personenkult schrieb:
habe das immer bisher so gemacht
int i = 1; bool foo = (bool)i;
klar gibt das ein "problem" weil sich der compiler am c style cast stört. aber wenn man den weg lässt gibt es da nix mehr zu motzen...
naja bei den code gibt glaube ich der vc ne warnung aus die in etwa 'wieso machst du i nicht gleich zu ein bool' lautet (natürlich in einer unverständlichen form)
-
Das lustige an Deiner Lösung ist, daß Du zuerst einen int implizit in einen bool umwandelst, um dann anhand dessen die Entscheidung zu treffen, ob true oder false rauskommt...
Du könntest also genausogutbool MyBool = MyInt; schreiben
wahrscheinlich wird sogar der gleiche Code generiert...MfG Jester
-
Hi,
@Patrick: Mein "lol" bezog sich hierdrauf:
inline bool bool_cast (int value) { if (value <= 0) return (false); return (true); }
Und das ist ja jetzt wirklich der größte Quatsch in dem ganzen Thread hier (von der Geschwindigkeit hier).
ChrisM
-
Hallo,
wenn 'value' -1 is, gibst du false zurueck, was aber falsch ist.
mfg
v R
-
Wußte nicht das man über ein "i!=0" soviel text schreiben kann - aber jetzt hau ich meinen senf auch noch rein (Bautzner, extrascharf):
der code für "bool_cast" ist zwar falsch (wenn man von der zu werwartenden konvertierung ausgeht), aber nicht zwingend langsamer. selbst ein mittelmäßiger Optimizer kann das auf die selbe anzahl von Clocks reduzieren wie ein "i!=0"
DAS IST EIN STANDARDCAST
der aber leider nicht das verhalten hat, das man evtl. erwartet. Deswegen ja die Warnung.
DrGreenthumb:
Das dein Compiler das ohne Warnung macht, heißt noch gar nix.
mein compiler sagt zuint * i = NULL; *i = 10;
auch nix.
-
was erwartet man denn bei dem cast? ich muss da irgendwie ein anderes verständnis haben, denn er macht genau das was ich erwarte. alles was ungleich 0 ist wird true und der rest false.
-
japro schrieb:
alles was ungleich 0 ist wird true und der rest false.
Ist ja auch gut so. Aber man könnte ja auch eine Konvertierung entsprechend int->char erwarten (also maskierung der oberen stellen mit/ohne erhalt des Vorzeichens).
btw. VC7 spuck "performance warning" aus - soll wohl darauf hinweisen, das dies eben keine triviale operation ist.