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;
}
不过,我猜他们选择他们的实施的原因;他们的版本比“我的”有优势吗?
我有时使用逗号技巧,当我有一系列的声明,并且需要采取一些必要的步骤。 'a a =任何; B b =(命令式(a),whatever_else(a)); C c = ...'。也就是说,在C90代码中,我们没有混合声明和声明。 – Kaz