Ich bin gerade in diese Codezeile gelaufen:
%Vor% wobei length2
eine double
zurückgibt. Es verwirrt mich, dass 0.0 0, NULL
und / oder false
entspricht.
Ist dies ein Teil des C ++ - Standards oder ist das Verhalten nicht definiert?
Es ist ein sehr viel Standardverhalten (boolesche Konvertierung)
$ 4.12 / 1 - "Ein rvalue der Arithmetik, Aufzählung, Zeiger oder Zeiger auf Mitgliedstyp kann in ein umgewandelt werden rvalue des Typs bool. Ein Wert von Null, Nullzeigerwert oder Nullelement Zeigerwert wird in false konvertiert; Jeder andere Wert wird in true umgewandelt. "
Es ist erwähnenswert, dass dieser Code für Gleitkommadarstellungen extrem spröde ist. Dieser Code wird genau dann funktionieren, wenn der Fließkommawert genau 0 ist, was in den meisten Fällen ziemlich unwahrscheinlich ist. Es mag nicht in diesem speziellen Fall sein, aber es sollte sicherlich dokumentiert / kommentiert werden, wenn dies der Fall ist.
In praktisch allen anderen Situationen müssen Sie sich für ein "epsilon entscheiden Wert ", der den Bereich der Fließkommazahlen definiert, die Sie als" gleich "betrachten - andernfalls werden Ihre Vergleiche Sie sehr wahrscheinlich in Eckfällen (und oft auch nicht so sehr) überraschen.
Ja - der Vergleich ist gegen Null (0.0) und gibt false zurück, wenn das Ergebnis genau Null ist, und andernfalls wahr.
Das Verhalten wird von C übernommen, das den äquivalenten Vergleich auf die gleiche Weise behandelt.
Wenn Sie ohne Operatoren vergleichen, vergleichen Sie "gegen wahr", so dass jeder Variablentyp entweder als boolesch (einfacher Fall) oder als anderer Typ geprüft wird. Numerische Variablentypen haben ihren falschen Wert als "0", "0.0" oder so definiert. Wenn Sie sie also mit "wahr" vergleichen, gibt Ihr Vergleich den Wert false zurück.
Tags und Links c++ implicit-conversion floating-point