C++완벽한 전달


비고

완전한 전달은 인수의 ref-qualifier를 보존하기 위해 참조 를 전달해야합니다. 이러한 참조는 추론 된 상황 에서만 나타납니다. 그건:

template<class T>
void f(T&& x) // x is a forwarding reference, because T is deduced from a call to f()
{
    g(std::forward<T>(x)); // g() will receive an lvalue or an rvalue, depending on x
}

T 가 생성자 호출에서 추론되지 않기 때문에 다음은 완벽한 전달을 포함하지 않습니다.

template<class T>
struct a
{
    a(T&& x); // x is a rvalue reference, not a forwarding reference
};
C ++ 17

C ++ 17에서는 클래스 템플릿 인수를 공제 할 수 있습니다. 위의 예에서 "a"의 생성자는 전달 참조의 사용자가됩니다.

a example1(1);
  // same as a<int> example1(1);

int x = 1;
a example2(x);
  // same as a<int&> example2(x);

완벽한 전달 관련 예