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
.