다음을 통해 공유


forward

인수가 rvalue 또는 rvalue 참조인 경우 rvalue 참조에 대한 해당 인수를 조건적으로 캐스팅합니다. 그러면 인수의 rvalue 특성이 전달 함수로 복원되어 완벽하게 전달됩니다.

template<class Type>    // accepts lvalues
Type&& forward(typename remove_reference<Type>::type& Arg)

template<class Type>    // accepts everything else
Type&& forward(typename remove_reference<Type>::type&& Arg) noexcept

매개 변수

매개 변수

설명

Type

Arg에 전달된 값 형식(Arg 형식과 다를 수 있음)입니다. 일반적으로 전달 함수의 템플릿 인수에 의해 결정됩니다.

Arg

캐스팅할 인수입니다.

반환 값

Arg에 전달된 값이 원래 rvalue였거나 rvalue에 대한 참조였던 경우 Arg에 대한 rvalue를 반환합니다. 그렇지 않으면 해당 형식을 수정하지 않고 Arg를 반환합니다.

설명

forward를 호출하려면 명시적 템플릿 인수를 지정해야 합니다.

forward는 인수를 전달하지 않습니다. 대신 원래 rvalue 또는 rvalue 참조였던 경우 해당 인수를 rvalue 참조에 조건적으로 캐스팅하면 forward를 사용하여 컴파일러에서 전달된 인수의 원래 형식을 알고 오버로드 해결을 수행할 수 있습니다. 전달 함수에 대한 인수의 명백한 형식은 원래 형식과 다를 수 있습니다. 예를 들어, rvalue가 함수에 대해 사용되고 매개 변수 이름에 바인딩된 경우, 이름을 지정하면 해당 값이 실제로 rvalue로 존재하는지 여부와 상관없이 lvalue가 됩니다. forward는 인수의 rvalue 특성을 복원합니다.

오버로드 해결을 수행하기 위해 인수의 원래 값의 rvalue 특성을 복원하는 것을 완벽한 전달이라고 합니다. 완벽한 전달을 사용하면 템플릿 함수에서 참조 형식의 인수를 허용하고 올바른 오버로드 해결을 위해 필요할 때 rvalue 특성을 복원할 수 있습니다. 완벽한 전달을 수행하면 rvalue에 대해 이동 의미 체계를 보존하고 인수의 참조 형식만 다른 함수의 오버로드를 제공하지 않아도 됩니다.

요구 사항

헤더: <utility>

네임스페이스: std

참고 항목

참조

<utility>

Lvalue 및 Rvalue