http://en.cppreference.com/w/cpp/algorithm/clamp将此作为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;
}
虽然我确实理解了这是如何工作的,但是把断言声明放在回报中对我来说似乎很奇怪;我会把它写成:
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;
}
尽管如此,我还是猜测他们选择了他们的实施是有原因的;他们的版本优于&#34;我的&#34;?
答案 0 :(得分:38)
在C ++ 11中,constexpr
函数只能有一个return语句(参见here)。建议的实现允许该函数在符合C ++ 11的编译器中使用。
C ++ 14删除了此限制,因此您的实现在C ++ 14或更高版本中也有效。
忽略这一点,功能完全相同,而且你的功能肯定更具可读性。