> 백엔드 개발 > C++ > `std::string`과 `std::Vector`를 `const &`로 전달해야 할까요?

`std::string`과 `std::Vector`를 `const &`로 전달해야 할까요?

Barbara Streisand
풀어 주다: 2024-12-10 13:54:11
원래의
1014명이 탐색했습니다.

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

최적화를 위한 매개변수 전달 규칙 점검

최근 강연에서 Herb Sutter는 std::Vector 및 std::string 객체 전달을 제안했습니다. by const &는 더 이상 사용되지 않습니다. 이 주장은 프로그래머들 사이에서 논의를 촉발시켰습니다.

Sutter의 이론적 근거

Sutter는 함수가 rvalue(즉, 임시 개체)를 반환하는 경우 입력 값을 전달한다고 주장합니다. 값별 매개변수를 사용하면 이동 의미론을 사용하여 보다 효율적으로 처리할 수 있습니다. 이렇게 하면 불필요한 복사나 메모리 할당을 피할 수 있습니다.

다음 코드 조각을 고려하세요.

std::string do_something ( std::string inval )
{
   std::string return_val;
   // ... do stuff ...
   return return_val;
}
로그인 후 복사

inval을 값으로 전달하면 함수가 값을 직접 수정하고 반환할 수 있으므로 복사본이 필요하지 않습니다. constructor.

에 대한 우려사항 효율성

비평가들은 std::string과 같은 큰 객체를 값으로 전달하는 것이 객체 이동에 따른 오버헤드로 인해 여전히 비효율적일 수 있다고 주장합니다. std::string 인스턴스는 힙 포인터와 짧은 문자열 최적화를 위한 멤버 char[]를 포함한 여러 구성 요소로 구성됩니다.

참조 매개 변수에 대한 인수

잠재적인 비효율성을 고려하여 참조 매개변수를 지지하는 사람들은 여러 가지 매개변수를 제공한다고 주장합니다. 이점:

  • 캡슐화: 참조를 사용하는 함수는 원래 객체를 수정하지 않는다는 점을 분명히 합니다.
  • 복잡성 감소: 참조 매개변수는 소유권과 수명을 고려할 필요를 제거하여 코드를 단순화합니다.

결론

객체를 const & 값으로 전달할지 여부는 특정 사용 사례에 따라 선택됩니다. 효율성이 중요하고 함수가 rvalue에서 작동하는 상황에서는 이동 의미론을 사용하여 값을 전달하면 성능상의 이점을 얻을 수 있습니다. 그러나 캡슐화, 단순성 또는 소유권 관리가 중요한 경우에는 참조 매개변수가 여전히 중요합니다.

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

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