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
とb
withを区別でき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
。