최적화를 위한 매개변수 전달 규칙 점검
최근 강연에서 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!