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을 고려하세요. :
templatevoid perfectSet(T&& t) { set(std::forward (t)); }
이제 PerfectSet이 lvalue로 호출되면 인스턴스화된 함수의 T 유형이 T&로 추론됩니다. std::forward 변환은 인수가 lvalue 참조로 설정되도록 전달되도록 합니다.
std::vectorv; 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