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;
}
Run Code Online (Sandbox Code Playgroud)
虽然我确实理解这是如何工作的,但是把断言声明放在回报中对我来说似乎很奇怪; 我会把它写成:
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;
}
Run Code Online (Sandbox Code Playgroud)
不过,我猜他们之所以选择他们的实施是有原因的; 他们的版本优于"我的"吗?
Jos*_*and 38
在C++ 11中,constexpr函数只能有一个return语句(参见这里).建议的实现允许该函数在符合C++ 11的编译器中使用.
C++ 14删除了这个限制,因此您的实现在C++ 14或更高版本中也是有效的.
忽略这一点,功能完全相同,你的功能肯定更具可读性.
| 归档时间: |
|
| 查看次数: |
1248 次 |
| 最近记录: |