Wir verwenden die meiste Zeit den Integer-Typ, der Indexvariablen darstellt. Aber in einigen Situationen sind wir gezwungen zu wählen
std::vector<int> vec;
....
for(int i = 0; i < vec.size(); ++i)
....
Dies führt dazu, dass der Compiler die Warnung auslöst, dass vorzeichenbehaftete / vorzeichenlose Variablen gemischt verwendet werden. Wenn ich die Indexvariable als for( size_t i = 0; i < vec.size(); i++ )
(oder an unsigned int
) mache , werden die Probleme behoben.
Wenn es spezifischer wird, Windows-Typen zu verwenden, befassen sich die meisten Windows-APIs mit DWORD (das als lange ohne Vorzeichen definiert wurde).
Wenn ich also eine ähnliche Iteration verwende, wird wieder dieselbe Warnung ausgelöst. Nun, wenn ich es umschreibe als
DWORD dwCount;
....
for(DWORD i = 0; i < dwCount; ++i)
....
Ich finde das ein bisschen komisch. Es könnte das Problem mit den Wahrnehmungen sein.
Ich bin damit einverstanden, dass wir denselben Typ von Indexvariablen verwenden sollen, um zu vermeiden, dass bei den Indexvariablen Bereichsprobleme auftreten können. Zum Beispiel wenn wir verwenden
_int64 i64Count; //
....
for(_int64 i = 0; i < i64Count; ++i)
....
Im Fall von DWORD oder vorzeichenlosen Ganzzahlen gibt es jedoch Probleme beim Umschreiben als
for(int i = 0; (size_t)i < vec.size(); ++i)
Wie die meisten Leute arbeiten mit ähnlichen Themen?
std::size_t
ist ein höherer Rang als int (oder sogar lang). Wenn die Größe des Vektors jemals überschritten wird std::numeric_limits<int>::max()
, werden Sie es bereuen, int verwendet zu haben.