2012-01-20 6 views
2

는 다음과 같은 작은 예제를 고려하십시오'T'와 같은 템플릿 인수는 항상 값으로 해석됩니까?

template<typename T> void foo(T a) { ... } 
struct Bar { ... }; 
Bar x; 
foo(x); 

내 질문 : foo(x)는 (참조에 의해 전달 x)를 foo(const Bar& x)로 해석 될 수도 있고, 항상 즉, 명시 적 값에 의해 전달 X (foo(Bar x)로 해석됩니다 어떤 경우가 있습니까 x의 사본)?

내 구체적인 응용 프로그램에서 내 코드는 복사본이 생성된다는 사실에 의존합니다 (x는 다른 스레드에서 사용되고 원래 x는 범위를 벗어납니다). 그러나 내가 그럴 수 있을지 확신 할 수 없다. GCC 4.6.1을 사용하고 있습니다.

+0

예를 들어 보지 않으시겠습니까? T는 int에서 포인터에 이르기까지 무엇이든 될 수 있다고 생각합니다. –

답변

5

경우, 항상 값에 의해 전달됩니다. 그러나 템플릿 매개 변수를 명시 적으로 만들면 참조로 전달할 수 있습니다.

1

작성된대로 Bar 개체는 값으로 전달됩니다. 참조가 필요할 경우 항상 다른 함수를 정의 할 수 있습니다.

Ex. 을 추론

template<typename T> void fooByRef(const T& a) { ... } 
관련 문제