Un modello molto comune nella programmazione è quello di limitare un valore al massimo dopo un qualche tipo di aggiornamento. Quello che mi piacerebbe sapere, è se c'è una differenza tra i due pezzi di codice, e se uno dovrebbe essere preferito:In C++, è meglio limitare un valore usando std :: min o un ramo if?
value += increment;
value = std::min(value, valueMax);
vs
value += increment;
if (value > valueMax)
value = valueMax;
Il mio pensiero è che questo si riduce se le CPU hanno istruzioni per prendere due valori e produrre il minimo. In tal caso, la chiamata a std :: min dovrebbe risultare in questa istruzione ed evitare un ramo non necessario. In caso contrario, la seconda versione evita un'assegnazione non necessaria quando il valore è < = valueMax.
Non sono molto bravo con questo genere di cose, ma sono sicuro che ci siano gli hacker della vecchia scuola che lo saprebbero. A loro chiedo: che è meglio?
Provate entrambi e guardate all'assemblaggio ... – Mysticial
Direi che la prima versione eseguirà sempre * almeno * e la seconda versione, quindi non c'è ragione di non usarlo. La prima versione potrebbe * anche * essere più veloce, anche se non ci sono garanzie al riguardo. –
Come implicito in Mysticial, dipende dall'implementazione di std :: min (http://en.cppreference.com/w/cpp/algorithm/min). – DavidA