Von size_t nach int konvertieren oder mit size_t iterieren?

8

Ist es besser, den Operanden Iterator-Bedingung rechts von size_t nach int zu konvertieren oder möglicherweise über den Maximalwert von int ? Ist die Antwort-Implementierung spezifisch?

%Vor%     
Nick Bolton 12.08.2009, 18:33
quelle

3 Antworten

7

Ich benutze fast immer die erste Variante, weil ich finde, dass etwa 80% der Zeit, ich finde, dass some_func wahrscheinlich auch eine size_t nehmen sollte.

Wenn in der Tat some_func einen int-Wert annimmt, müssen Sie wissen, was passiert, wenn vect größer wird als INT_MAX . Wenn die Lösung in Ihrer Situation nicht offensichtlich ist (normalerweise nicht), können Sie some_func((int)i) durch some_func(numeric_cast<int>(i)) ersetzen (siehe Boost.org für eine Implementierung von numeric_cast). Dies hat den Vorteil, dass eine Ausnahme ausgelöst wird, wenn vect größer wird als geplant, anstatt stillschweigend negative Werte zu verwenden.

    
Mike Elkins 12.08.2009, 19:10
quelle
3

Ich würde es einfach als size_t belassen, da es keinen guten Grund gibt, das nicht zu tun. Was meinst du mit "oder iteriere potenziell bis zum maximalen Wert von type_t"? Sie durchlaufen nur den Wert von vect.size() .

    
mipadi 12.08.2009 18:36
quelle
1

Für die meisten Compiler macht das keinen Unterschied. Auf 32-Bit-Systemen ist es offensichtlich, aber selbst auf 64-Bit-Systemen werden beide Variablen wahrscheinlich in einem 64-Bit-Register gespeichert und als 64-Bit-Wert auf den Stapel geschoben.

Wenn der Compiler int -Werte als 32-Bit-Werte auf dem Stack speichert, sollte die erste Funktion hinsichtlich der CPU-Zyklen effizienter sein.

Aber der Unterschied ist vernachlässigbar (obwohl die zweite Funktion "sauberer" aussieht)

    
Philippe Leybaert 12.08.2009 18:41
quelle

Tags und Links