>  기사  >  백엔드 개발  >  C에서 값에 의한 전달과 R값 참조에 의한 전달을 언제 선택해야 합니까?

C에서 값에 의한 전달과 R값 참조에 의한 전달을 언제 선택해야 합니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-24 05:00:31574검색

When to Choose Pass by Value vs Pass by Rvalue Reference in C  ?

값 전달 및 R값 참조 전달

함수 매개변수에 대한 값 전달 또는 rvalue 참조 전달 중에서 결정하는 것은 여러 요인에 따라 달라집니다.

값별 전달

  • (Widget w)

    • 복사본 생성 입력 매개변수는 원본을 변경하지 않고 그대로 둡니다.
    • 암시적 복사 작업이 포함되어 크거나 복잡한 개체에 비효율적일 수 있습니다.
    • 매개변수를 수정하지 않더라도 매개변수의 소유권을 가정합니다. .

Rvalue 참조 전달

  • (Widget&& w)

    • rvalue(예: 만료되는 임시 객체)로 매개변수를 강제로 초기화하여 복사 작업을 방지합니다.
    • 호출자가 복사본을 원할 경우 std::move를 사용하여 명시적인 복사본 선언이 필요합니다. .
    • 발신자의 복사본에 반영되는 반환 값의 변경 사항을 비활성화합니다.

주요 차이점

  • 소유권 복사: 값에 의한 전달은 매개변수를 복사해야 하는 반면, rvalue 참조에 의한 전달은 함수가 매개변수를 이동하도록 허용하여 경우에 따라 추가 이동 생성자 호출을 제거합니다.
  • 인터페이스 의미: Rvalue 참조는 함수가 값의 소유권을 가지려고 하며 해당 값의 지속적인 존재에 대해 책임을 지지 않음을 나타냅니다.
  • 효율성: rvalue로 전달 호출자가 입력 객체의 복사본을 필요로 하지 않는 경우 참조가 더 효율적일 수 있습니다.

올바른 방법 선택

다음과 같은 경우 값으로 전달을 사용하세요. :

  • 이 함수에는 입력 개체의 복사 또는 수정된 버전이 필요합니다.
  • 입력 개체가 작거나 복사 비용이 저렴합니다.

패스 사용 rvalue 참조 기준:

  • 함수가 소유권을 가져와 입력 객체를 수정해야 하는 경우.
  • 입력 객체가 크거나 복사하는 데 비용이 많이 듭니다.
  • 호출자 입력 개체의 복사본이 필요하지 않습니다.

위 내용은 C에서 값에 의한 전달과 R값 참조에 의한 전달을 언제 선택해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.