"속도를 원하십니까? 가치로 전달": 자세한 설명
"속도를 원하십니까? 가치로 전달"이라는 개념이 논의를 불러일으켰습니다. 프로그래밍 커뮤니티에서. 이 문서에서는 값 대 참조로 인수를 전달할 때 성능에 미치는 영향을 자세히 알아보고 값으로 전달하여 속도를 높일 수 있는 상황을 조명합니다.
X 및 Y 구조를 묘사하는 다음 코드 조각을 고려하세요.
<code class="cpp">struct X { std::string mem_name; X(std::string name) : mem_name(std::move(name)) {} }; struct Y { std::string mem_name; Y(const std::string &name) : mem_name(name) {} };</code>
X의 생성자에서 "name" 인수가 복사된 후 "mem_name"으로 이동됩니다. Y의 생성자에서 "name"은 const 참조이므로 초기 복사본이 필요하지 않습니다. 한 번의 복사 작업만으로 Y의 접근 방식이 더 효율적으로 보일 수 있습니다.
그러나 "속도를 원하십니까? 값으로 전달"이라는 개념은 일부 시나리오에서는 복사를 생략할 수 있음을 강조합니다. 다음 코드를 고려하십시오.
<code class="cpp">std::string foo() { return "a" + std::string("b"); } int main() { X(foo()); Y(foo()); }</code>
이 경우 X는 "name" 객체의 공간에 직접 foo()의 반환 값을 구성할 수 있으므로 추가 복사본이 필요하지 않습니다. 그러나 Y는 임시 반환 값을 "mem_name"에 복사해야 합니다. 따라서 rvalue 인수의 경우 값으로 전달(이 경우 X를 통해)하면 잠재적으로 단일 이동 작업이 발생할 수 있는 반면, 참조로 전달(Y를 통해)에는 불가피한 복사가 포함됩니다.
요약:
참조로 전달하는 것은 일반적으로 포인터를 전달하는 것으로 해석되지만 이동 작업은 포인터를 전달하는 것보다 작업적으로 더 빠를 수 있습니다. 따라서 값을 전달하면(어떤 경우에는) 불필요한 복사를 방지하고 성능을 향상시킬 수 있습니다.
이러한 지침은 절대적인 것이 아니며 신중하게 해석해야 한다는 점에 유의하는 것이 중요합니다. 의심스러운 경우 특정 시나리오에 대한 실제 성능 영향을 확인하기 위해 프로파일링을 수행하는 것이 좋습니다.
위 내용은 값으로 전달하는 것이 참조로 전달하는 것보다 항상 느린가요? \'속도를 원하십니까? 가치에 의한 전달\' 논쟁의 포장 풀기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!