C 11에서 값별 전달 다시 생각하기
전통적인 C에서는 값을 함수에 전달하면 대형 개체에 대한 성능 저하가 발생했습니다. . 따라서 C 프로그래머는 참조별 전달을 선택하여 속도를 향상시키지만 특히 힙 할당 개체의 경우 소유권 및 메모리 관리가 복잡해졌습니다.
C 11에서는 Rvalue 참조 및 이동 생성자를 도입하여 효율적인 전달을 가능하게 했습니다. - std::벡터 및 std::string과 같은 대형 객체의 값입니다. 이는 값에 의한 전달이 그러한 유형의 기본값이 되어야 하는지에 대한 의문을 제기합니다.
값에 의한 전달: 새로운 기본값?
Dave Abrahams에 따르면, 함수 내에서 복사가 필요한 경우 값별 전달이 선호되는 기본값이 될 수 있습니다. 컴파일러가 복사를 처리하도록 허용함으로써 프로그래머는 명시적인 복사 작업을 피할 수 있습니다.
void foo(T t) { // ... }
참조로 전달하는 것과 비교:
void foo(T const& t) { auto copy = t; // ... }
값으로 전달은 호출자에게 유연성을 제공합니다. :
T lval; foo(lval); // copy from lvalue foo(T {}); // (potential) move from prvalue foo(std::move(lval)); // (potential) move from xvalue
예외 값별 전달
값별 전달은 일부 유형에 적합할 수 있지만 const를 참조하여 전달하는 것은 여전히 합리적인 옵션입니다.
위 내용은 대형 개체에 대한 값별 전달이 C 11의 기본값이어야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!