2013-08-11 5 views
0

the Infinite Skills "Advanced C++ Programming Training Video"에서 함수 템플릿에 대한 섹션에서 발표자는 해당 함수에 인수를 전달하는 동안 값에 따라 값을 전달하지 않고 참조로 전달해야한다고 말했습니다. 컴파일러에서 우리에게 "힘든 시간"을줍니다. 나는 이것이 무엇 일 수 있는지 전혀 모른다. 이 함수는 두 개의 인수 중 최대 값을 계산하고이를 반환합니다. 두 가지 기능은 다음과 같습니다.템플릿 : 템플릿의 인수를 인수로 전달

// The function given in the tutorial 
T maxVal(T &a1, T &a2) 
{ 
    if(a1<a2) 
     return a1; 
    else 
     return a2; 
} 

// My function 
T maxVal(T a1, T a2) 
{ 
    if(a1<a2) 
     return a1; 
    else 
     return a2; 
} 

문제는 두 가지 모두 정상적으로 작동하는 것입니다. 가능한 "어려움"이 무엇인지 알려줌으로써 나를 도울 수 있습니까?

+0

아마도 불필요한 복사 (당신이 임시직을 수락하지 않습니다 표시했습니다과 const를 참조해야 첫 번째하지만). – chris

+3

일시적으로 통과하면 첫 번째 예제로 어려울 수 있습니다. 이것은 튜토리얼이 좋지 않다는 결론을 내리게한다. – juanchopanza

+0

자습서는 비밀입니까? –

답변

0

첫 번째 비 const 참조를 지원하지 않습니다 : max (1, 2); 값에 의한 두 번째 인수는 인수를 복사합니다. max (huge_object_a, huge_object_b); // 컴파일러가 최적화 할 수도 있습니다.

std::max은 다음과 같습니다

template <class T> const T& max(const T& a, const T& b); 
+0

이 모든 것은 값으로 전달 된 결과 인 사본 생성을 피하는 것에 관한 것입니다. 맞습니까? – kusur

관련 문제