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