Bardzo częstym wzorcem w programowaniu jest maksymalne ograniczenie wartości po jakiejś aktualizacji. Co chciałbym wiedzieć, jest, jeśli istnieje różnica pomiędzy następującymi dwoma kawałkami kodu, a jeśli trzeba być preferowane:W C++, czy lepiej jest ograniczyć wartość przy użyciu std :: min lub oddziału?
value += increment;
value = std::min(value, valueMax);
vs
value += increment;
if (value > valueMax)
value = valueMax;
Moje myślenie jest to, że przychodzi do tego, czy procesory mają instrukcje do pobierania dwóch wartości i tworzenia minimum. Jeśli tak, wywołanie std :: min powinno skutkować tą instrukcją i uniknąć niepotrzebnej gałęzi. Jeśli nie, druga wersja unika niepotrzebnego przypisania, gdy wartość < = valueMax.
Nie jestem zbyt dobry w tego typu sprawach, ale jestem pewien, że są to hakerzy ze starej szkoły, którzy o tym wiedzą. Zapytam ich: co jest lepsze?
Spróbuj i spójrz na zestaw ... – Mysticial
Powiedziałbym, że pierwsza wersja zawsze będzie wykonywać co najmniej * oraz drugą wersję, więc nie ma powodu, aby jej nie używać. Pierwsza wersja może * również * być szybsza, chociaż nie ma na to żadnych gwarancji. –
Jak sugeruje Mysticial, zależy to od implementacji std :: min (http://en.cppreference.com/w/cpp/algorithm/min). – DavidA