c++ - que - Regreso con aserte y operador de coma.
operadores logicos en c (1)
http://en.cppreference.com/w/cpp/algorithm/clamp ofrece esto como una posible implementación para std::clamp
:
template<class T, class Compare>
constexpr const T& clamp( const T& v, const T& lo, const T& hi, Compare comp )
{
return assert( !comp(hi, lo) ),
comp(v, lo) ? lo : comp(hi, v) ? hi : v;
}
Si bien entiendo cómo funciona esto, poner la declaración de afirmación en la declaración me parece bastante extraño; Lo habría escrito como:
template<class T, class Compare>
constexpr const T& clamp( const T& v, const T& lo, const T& hi, Compare comp )
{
assert( !comp(hi, lo) );
return comp(v, lo) ? lo : comp(hi, v) ? hi : v;
}
Aún así, supongo que eligieron su implementación por una razón; ¿Hay alguna ventaja de su versión sobre "la mía"?
En C ++ 11, constexpr
funciones constexpr
solo pueden tener una única declaración de retorno (ver here ). La implementación sugerida permite que la función se use en un compilador compatible con C ++ 11.
C ++ 14 eliminó esta restricción, por lo que su implementación también es válida en C ++ 14 o posterior.
Sin tener en cuenta esto, las funciones son exactamente equivalentes, y la suya es definitivamente más legible.