sirve que punto programacion para operadores logicos coma asignacion aritmeticos c++ c++17

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.