C ++テンプレート-完全ガイド、第2版では、maxテンプレートが導入されています。
template<typename T>
T max (T a, T b)
{
// if b < a then yield a else yield b
return b < a ? a : b;
}
そしてそれは“b < a ? a : b”代わりに使用することを説明します“a < b ? b : a”:
[StepanovNotes]によるmax()テンプレートは意図的に「b <a?「a <b?の代わりにa:b」b:a” 2つの値が等しくても等しくない場合でも、関数が正しく動作することを確認します。
「even if the two values are equivalent but not equal.」を理解するには?“a < b ? b : a”私には同じ結果があるようです。
aとbwithを区別できstd::addressofます。al。
a = max(a, b);(繰り返し)行う場合は、a不必要に交換したくない場合があります。
aのコピーでオーバーライドしようとしますa)。
std::addressof、無関係です。実際、与えられたT max(T a, T b)私たちはすでに知っていaddressof(a) != addressof(b)ます。
aとbが同等で!(a < b) && !(b < a)ある場合、はtrueでa < bありb < a、両方ともfalseなのでb < a ? a : b、bで返されますa < b ? b : a。