> 백엔드 개발 > C++ > Rvalue 참조는 언제 함수 내에서 Lvalue처럼 작동합니까?

Rvalue 참조는 언제 함수 내에서 Lvalue처럼 작동합니까?

Mary-Kate Olsen
풀어 주다: 2024-12-25 12:05:09
원래의
857명이 탐색했습니다.

When Does an Rvalue Reference Act Like an Lvalue Inside a Function?

Rvalue 참조가 함수 내에서 Lvalue처럼 동작하는 경우는 언제입니까?

아래 코드 조각에서 foo 함수는 rvalue 참조를 받습니다. bar라는 매개변수입니다.

void foo(string&&& bar) {
    string* temp = &bar;

    cout << *temp << " @:" << temp << endl;
}
로그인 후 복사

이 코드는 다음과 같은 질문을 촉발시켰습니다. bar는 다음과 같이 처리됩니까? 주소를 가져올 수 있으므로 함수 내의 lvalue는 무엇입니까?

bar는 Rvalue입니까 아니면 Lvalue입니까?

이 질문은 본질적으로 질문 자체 내에서 답변됩니다. 이름이 있는 모든 것은 lvalue입니다. 따라서 bar는 lvalue로 인식됩니다. 그러나 bar에는 "문자열에 대한 rvalue 참조"라는 유형이 있다는 점에 유의하는 것이 중요합니다.

bar를 rvalue로 처리하려면 std::move()를 적용해야 합니다. .

Lvalue 참조와 Rvalue 참조를 구별하는 이유는 무엇입니까?

이것은 각 참조 유형에 바인딩할 수 있는 항목을 고려할 때 구별이 중요해집니다. Lvalue는 lvalue 참조에 바인딩할 수 있는 반면 rvalue는 rvalue 참조에 바인딩할 수 있습니다(그리고 무엇이든 const에 대한 lvalue 참조에 바인딩할 수 있습니다).

즉, rvalue는 lvalue 참조에 바인딩할 수 없으며 그 반대의 경우도 마찬가지입니다.

Rvalue 참조 유형의 매개변수

rvalue 참조의 함수 매개변수를 다루는 경우 유형의 경우 참조가 가리키는 값에 대해 이것이 무엇을 의미하는지 이해하는 것이 중요합니다. rvalue 참조는 할당된 값이 rvalue임을 나타냅니다. 결과적으로 표현식이 끝나면 해당 리소스가 해제되어 rvalue로 관리할 수 있습니다.

Rvalue 참조 전달

rvalue 참조 매개변수를 추가로 전달할 때, 두 가지 옵션이 있습니다:

  1. 참조가 완료되면 std::move(bar)를 사용하여 참조하는 값이 rvalue임을 나타냅니다.
  2. bar에서 추가 작업을 수행하려는 경우 의도하지 않은 리소스 도난을 방지하기 위해 lvalue 참조를 유지하세요.

결론

lvalue 참조와 rvalue 참조의 차이점은 얻은 후의 동작이 아니라 무엇에 바인딩할 수 있는지에 있습니다. 그들을. 이러한 이해는 함수 내에서 참조를 효과적으로 처리하고 관리하는 데 필수적입니다.

위 내용은 Rvalue 참조는 언제 함수 내에서 Lvalue처럼 작동합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿