"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > std::forward는 C++에서 lvalue 및 rvalue 참조의 완벽한 전달을 어떻게 보장합니까?

std::forward는 C++에서 lvalue 및 rvalue 참조의 완벽한 전달을 어떻게 보장합니까?

2024년 11월 19일에 게시됨
검색:887

How does std::forward ensure perfect forwarding of lvalue and rvalue references in C  ?

std::forward가 Lvalue 및 Rvalue 참조의 완벽한 전달을 촉진하는 방법

C에서 std::forward는 달성에 중요한 역할을 합니다. 완벽한 전달: 원래 값 범주가 보존된 상태로 인수가 함수에 전달되도록 보장합니다. 이 동작은 lvalue 및 rvalue 참조를 처리할 때 특히 혼란스러울 수 있습니다.

Lvalue와 Rvalue 구별

"이름이 있으면 lvalue입니다." 이 말은 일반적으로 사실이지만, thing&& x 대 thing& x.

Lvalue 참조(thing& x)

인수가 lvalue 참조로 전달되면 함수 내에서 lvalue 참조로 유지됩니다. Lvalue 참조는 항상 명명된 특정 메모리 위치에 바인딩됩니다.

Rvalue 참조(thing&& x)

반대로 인수가 rvalue 참조로 전달되면 rvalue 참조이거나 변환된 lvalue 참조일 수 있습니다. rvalue 참조는 임시 개체 또는 이동 중인 값에 바인딩됩니다.

std::forward 작동 방식

std::forward는 특수 개체로 정의됩니다. 변환 테이블. 주요 목적은 모든 유형의 참조를 rvalue 참조로 변환하는 것입니다. 이 변환은 원래 인수의 값 범주를 변경하지 않습니다.

예: std::forward를 사용한 완벽한 전달

T&& 인수를 허용하는 템플릿 함수 PerfectSet을 고려하세요. :

template
void perfectSet(T&& t) {
    set(std::forward(t));
}

이제 PerfectSet이 lvalue로 호출되면 인스턴스화된 함수의 T 유형이 T&로 추론됩니다. std::forward 변환은 인수가 lvalue 참조로 설정되도록 전달되도록 합니다.

std::vector v;
perfectSet(v); // lvalue reference passed to set

에 전달된 lvalue 참조 그러나 PerfectSet이 rvalue와 함께 호출되면 T는 T&&로 추론되고 std::forward는 인수를 rvalue 참조로 변환하여 set:

perfectSet(makeAndFillVector()); // rvalue reference passed to set

Conclusion

std::forward에 전달된 rvalue 참조는 함수에 전달된 인수의 값 범주를 보존하여 완벽한 전달을 용이하게 하는 강력한 도구입니다. 이를 통해 효율적이고 유형이 안전한 값 전송이 가능해지며 최적의 성능과 코드 정확성이 보장됩니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3