통과의 폐기 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!