C ++ 템플릿-전체 안내서, 2 판 에서는 최대 템플릿을 소개합니다 .
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? b : a”를 사용하여 두 값이 같지만 같지 않더라도 함수가 올바르게 작동하는지 확인하십시오.
" even if the two values are equivalent but not equal." 를 이해하는 방법 ? “a < b ? b : a”나에게 동일한 결과가있는 것 같습니다.
a와 b함께 std::addressof등. 알.
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)사실, 그렇게a < b하고b < a모두 거짓이다, 그래서에b < a ? a : b,b당신은 당신이 원하는 ... 원하는하지 않은 반환됩니다a < b ? b : a.