Warning: '<': signed/unsigned mismatch ignorieren?
-
Eisflamme schrieb:
Da signed negative Zahlen hat, würde das aber zu sehr hohen positiven Zahlen führen
Das habe ich nicht ganz verstanden...
Die Meldung warnt dich, dass du zwei verschiedene Datentypen verwendest, die logischerweise unterschiedliche Wertebereiche besitzen. Da es manchmal unbeabsichtigt passiert, führt es automatisch zu ungewollten Ergebnissen. Wenn du dir sicher bist, dass das so sein soll, kannst du dir Meldung auch ignorieren/verstecken. Eleganter wäre es aber, die Ursache zu beseitigen.Grüße,
Rewind
-
Ich versteh nicht, was Du nicht verstehst, weil Deine Erklärung richtig ist. Dein Zitat von mir bezieht sich auf den Fall der negativen Werte für signed Typen.
-
[Rewind] schrieb:
Eisflamme schrieb:
Da signed negative Zahlen hat, würde das aber zu sehr hohen positiven Zahlen führen
Das habe ich nicht ganz verstanden...
http://de.wikipedia.org/wiki/Zweierkomplement schrieb:
Negative Zahlen werden wie folgt aus einer positiven Zahl kodiert: Sämtliche binären Stellen werden negiert und zu dem Ergebnis der Wert 1 addiert. (Mathematisch exaktes Verfahren siehe formale Umwandlung.)
-1 hat zB alle bits gesetzt. Aber ein unsigned mit allen bits gesetzt ist die groesste darstellbare Zahl fuer diesen Typen.
Deshalb ist ein signed/unsigned Vergleich gefaehrlich. Da negative Zahlen zu problemen fuehren.
-
volkard schrieb:
Ja.
oder gleich size_t.Bringt der gewisse Vorteile?
-
@Eisflamme: sorry, hatte deinen Satz falsch gelesen.
-
Ja, er ist der selbe Typ, den dir auch string::size() zurückgibt. (und niemand garantiert dir, daß beim nächste Compiler nicht sizeof(int)<sizeof(size_t) ist)
-
CStoll schrieb:
Ja, er ist der selbe Typ, den dir auch string::size() zurückgibt. (und niemand garantiert dir, daß beim nächste Compiler nicht sizeof(int)<sizeof(size_t) ist)
Achso. Ja das macht Sinn
Ich habe gerade gesehen, dass std::vector size_type braucht. Sind size_t und size_type genau das selbe?
Wenn nicht wäre es dann ja am besten size_type zu verwenden mit std::vector<>::size, nicht?
-
CStoll schrieb:
Ja, er ist der selbe Typ, den dir auch string::size() zurückgibt. (und niemand garantiert dir, daß beim nächste Compiler nicht sizeof(int)<sizeof(size_t) ist)
Ist bei mir jetzt schon.
#include <iostream> using namespace std; int main() { cout<<sizeof(int)<<'\n'; cout<<sizeof(size_t)<<'\n'; }
Ausgabe:
4 8
(Linux 64Bit)
-
icarus2 schrieb:
Sind size_t und size_type genau das selbe?
Sie können gleich sein (und sind es auch meistens), müssen aber nicht. Daraus folgt die gleiche Argumentation wie oben bei size_t und string. Nimm daher um 100% korrekt zu sein das was tatsächlich angeboten wird. Wobei ich selber diesen Schritt nicht gehe und ganz faul das kürzere size_t schreibe anstatt container_type::size_type (nach vorherigem typedef für den betreffenden Container). Man kann es eben manchmal auch übertreiben mit der Portabilität.
-
Oki, dann nehme ich auch size_t.
Thx!