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?
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.
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)
Tags und Links c++