는 다음과 같은 작은 예제를 고려하십시오'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을 사용하고 있습니다.
예를 들어 보지 않으시겠습니까? T는 int에서 포인터에 이르기까지 무엇이든 될 수 있다고 생각합니다. –