> 백엔드 개발 > C++ > `const std::string&` 참조로 `std::string`을 계속 전달해야 합니까?

`const std::string&` 참조로 `std::string`을 계속 전달해야 합니까?

DDD
풀어 주다: 2024-12-10 00:27:16
원래의
319명이 탐색했습니다.

Should We Still Pass `std::string` by `const std::string&` Reference?

통과의 폐기 const std::string& 참조: Herb Sutter의 관점

최근 강연에서 Herb Sutter는 std::벡터 및 std::string을 const&로 전달합니다. 그는 전통적인 접근 방식인

std::string do_something(const std::string& inval)
로그인 후 복사

이 이제

std::string do_something(std::string inval)
로그인 후 복사

에 비해 덜 바람직하다고 제안했습니다. inval이 크기를 유지한다는 점은 인정되지만 Herb의 주장은 기능 체인과 관련된 시나리오에서 비롯됩니다. A가 B를 호출하고 B가 C를 호출하는 예를 생각해 보세요.

사례 1: const 참조로 전달

void B(const std::string& str) { C(str); }
void C(const std::string& str) { /* Use str but do not store it */ }
로그인 후 복사

C에 저장소가 필요한 경우 복사 작업 필요하게 됩니다:

void C(const std::string& str) { m_str = str; }
로그인 후 복사

그러나 const&를 사용하면 C가 해당 폴더로 이동된 기본 데이터에 액세스할 수 없습니다.

사례 2: 값 전달

void B(std::string str) { C(std::move(str)); }
void C(std::string str) { m_str = std::move(str); }
로그인 후 복사

이 시나리오에서는 문자열이 함수 호출을 통해 이동되어 불필요한 복사본을 방지합니다. 값으로 이동하는 성능 오버헤드는 SSO(Short String Optimization)를 통해 작은 문자열에 대한 메모리 할당을 방지하는 이점으로 상쇄됩니다.

결국, const 참조 또는 값 전달 중에서 선택하는 것은 특정 용도에 따라 다릅니다. 메모리 할당 효율성과 잠재적인 성능 단점에 대한 개발자의 선호도를 고려하세요.

위 내용은 `const std::string&` 참조로 `std::string`을 계속 전달해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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