> 백엔드 개발 > C++ > Modern C에서 값별 전달이 대형 객체의 기본값이어야 합니까?

Modern C에서 값별 전달이 대형 객체의 기본값이어야 합니까?

Linda Hamilton
풀어 주다: 2024-12-10 01:48:13
원래의
1051명이 탐색했습니다.

Should Pass-by-Value Be the Default for Large Objects in Modern C  ?

C 11에서 값에 의한 전달 다시 생각

C의 세계에서는 전통적으로 값에 의한 전달이 대규모로 권장되지 않습니다. 성능 문제로 인한 개체. 그러나 C 11에 Rvalue 참조 및 이동 생성자가 도입되면서 객체를 효율적으로 전달할 수 있는 새로운 가능성이 열렸습니다.

이제 값별 전달이 최고의 기본값인가요?

업계 전문가인 Dave Abrahams에 따르면 함수 내에서 복사본을 만들어야 하는 경우 std::Vector 및 std::string과 같은 큰 개체를 값으로 전달하는 것이 합리적입니다. 몸. 이를 통해 컴파일러는 최적화를 수행할 수 있으므로 프로그래머가 명시적으로 복사할 필요가 없습니다.

장점:

  • lvalue 및 lvalue 모두에 대해 최소한의 작업만 수행됩니다. prvalue 인수.
  • 참조별 전달을 허용하여 호출자의 구문을 단순화합니다. pass-by-prvalue 및 pass-by-xvalue.

사용자 정의 개체:

사용자 정의 개체의 경우 const에 대한 참조별 전달은 여전히 ​​입니다. 유연성을 제공하고 원래 개체를 의도치 않게 수정하는 위험을 최소화하므로 실행 가능한 옵션입니다.

최고 사례:

  • 함수 내에서 복사본을 만들어야 하는 경우 개체를 값으로 전달합니다.
  • 이동 의미를 최적화하는 데 필요한 경우에만 Rvalue 참조를 사용하세요.
  • 불변성과 소유권을 보장하기 위해 사용자 정의 객체에 대한 const에 대한 참조별 전달을 고려하세요. 명확성.

예:

권장 패턴을 구현하려면 값 있는 생성자를 다음과 같이 작성할 수 있습니다.

class T {
    U u;
    V v;
public:
    T(U u, V v)
        : u(std::move(u))
        , v(std::move(v))
    {}
};
로그인 후 복사

위 내용은 Modern C에서 값별 전달이 대형 객체의 기본값이어야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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