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;
}
私はこれがどのように動作するかを理解しないが、見返りにassert文を置くことは私にはかなり奇妙なよう。私はそれを次のように書いていたでしょう:
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は=何でも; B b =(命令的(a)、whatever_else(a)); C c = ... 'である。つまり、C90コードでは、宣言とステートメントが混在していません。 – Kaz