Ich untersuche einen Standard für mein Team um size_t
vs int
(oder long
, etc.). Der größte Nachteil, den ich gesehen habe, ist, dass die Verwendung von zwei size_t-Objekten zu Problemen führen kann (ich bin nicht sicher, ob bestimmte Probleme aufgetreten sind - vielleicht wurde etwas nicht ergänzt und der Compiler von signed/unsigned). Ich schrieb ein schnelles Programm in C++ die V120 VS2013-Compiler, die mir erlaubt, die folgendes zu tun:Ist es sicher, die Differenz von zwei size_t Objekten zu nehmen?
#include <iostream>
main()
{
size_t a = 10;
size_t b = 100;
int result = a - b;
}
Das Programm in -90
geführt, die zwar richtig, mich über Art Mismatches nervös macht, mit/ohne Vorzeichen Probleme oder einfach undefiniertes Verhalten, wenn size_t in komplexen Mathe verwendet wird.
Meine Frage ist, ob es sicher ist, Mathe mit size_t Objekten zu tun, insbesondere, den Unterschied zu machen? Ich überlege, size_t als Standard für Dinge wie Indizes zu verwenden. Ich habe einige interessante Beiträge zum Thema hier gesehen, aber sie befassen sich nicht mit dem Thema Mathematik (oder ich habe es verpasst).
What type for subtracting 2 size_t's?
typedef for a signed type that can contain a size_t?
Wenn die Subtraktion zu einer negativen Zahl führt, [wird es umgebrochen] (https://stackoverflow.com/questions/1269019/what-should-happen-to-the-negation-of-asize-tie -sizeofstruct-foo) nach [zwei Kompliment] (https://en.wikipedia.org/wiki/Two%27s_complement) – CoryKramer
Die Art, wie Sie es haben, ist es nicht sicher. Aber nicht wegen der Mathematik selbst. Sie werfen ein "size_t" -Ergebnis (das wahrscheinlich "unsigned long" ist) in ein "int" (vorzeichenbehaftet), was wahrscheinlich ein kleinerer Datentyp ist. –
Der entsprechende Unterschiedstyp von size_t ist ptrdiff_t, nicht int –