Const 참조로 R값 보존: A C 퍼즐
C에서는 일반 참조와 달리 const 참조로 rvalue(임시 객체) 전달이 허용됩니다. . 다음 프로그램을 고려해보세요:
void display(const int& a) { cout 이 프로그램에서는 참조가 const로 표시되어 있어도 lvalue와 rvalue를 모두 표시 함수에 전달할 수 있습니다. const 참조는 일반적으로 lvalue 보존과 연관되어 있기 때문에 이 동작은 혼란스럽습니다.
Const 참조 수명 확장
이 동작을 이해하는 열쇠는 의미론에 있습니다. C의 const 참조. const 참조는 포함 범위가 끝날 때까지 참조된 객체의 수명을 연장합니다. rvalue의 경우 이는 const 참조가 범위를 벗어날 때까지 임시 객체의 파괴를 효과적으로 방지합니다.
예: Rvalue 수명 연장
예를 들어, display(5)가 호출되면 다음이 발생합니다.
- int 유형의 rvalue가 다음 값으로 생성됩니다. 5.
- const 참조 a는 이 rvalue에 바인딩됩니다.
- const 참조는 표시 기능이 끝날 때까지 rvalue의 수명을 연장합니다.
- rvalue는 다음과 같습니다. 값을 인쇄하기 위해 함수 내에서 사용됩니다. 5.
- display 함수가 반환되면 const 참조는 범위를 벗어나고 rvalue는 마지막으로 destroy.
이는 어떻게 const 참조가 rvalue를 계속 가리키며 그렇지 않으면 즉시 소멸되더라도 존재를 유지하도록 허용하는지 보여줍니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3