나는 모방 A와 디자인 된 내부 라이브러리를 사용하고 C ++ 라이브러리를 제안 하고, 언젠가 지난 몇 년 동안 나는 볼의 인터페이스를 사용하여 변경 std::string
에를 string_view
.
그래서 새로운 인터페이스에 맞게 코드를 정중하게 변경했습니다. 불행히도, 전달해야 할 것은 std :: string 매개 변수이며 std :: string 반환 값입니다. 그래서 내 코드는 다음과 같이 변경되었습니다.
void one_time_setup(const std::string & p1, int p2) {
api_class api;
api.setup (p1, special_number_to_string(p2));
}
에
void one_time_setup(const std::string & p1, int p2) {
api_class api;
const std::string p2_storage(special_number_to_string(p2));
api.setup (string_view(&p1[0], p1.size()), string_view(&p2_storage[0], p2_storage.size()));
}
나는 정말 (아마도 망치)이 변화가 더 많은 코드 이외의 API 클라이언트, 나를 구입 무엇을 볼 수 없습니다. API 호출은 안전하지 않습니다 (API가 더 이상 매개 변수에 대한 스토리지를 소유하지 않기 때문에). 아마도 프로그램 0 작업을 저장했습니다 (컴파일러가 지금 할 수있는 최적화 작업으로 인해). 작업을 저장하더라도 작업을 저장하더라도 시작 후 또는 어딘가에 큰 루프에서 수행되지 않을 두 개의 할당. 이 API에는 해당되지 않습니다.
그러나이 방법은 예를 들어, 내가 다른 곳에서 볼 수 조언을 따르는 것 이 답변 :
따로, C ++ 17부터 std :: string_view를 위해 const std :: string &을 전달하지 않아야합니다.
나는 주로 최적화의 목적으로 비교적 안전한 객체를 덜 안전한 객체 (기본적으로 영광스러운 포인터 및 길이)로 대체하는 것을 옹호하는 것처럼 보이는 충고가 놀랍습니다.
그럼 언제 해야 string_view 사용될 때, 그리고 그것을해야하지?
<string>
헤더에 있으며 자동으로 발생합니다. 그 코드는기만적이고 잘못되었습니다.
std::string_view
생성자를 직접 호출 할 필요가 없으며 직접 가져 오는 메소드에 문자열을 전달std::string_view
하면 자동으로 변환됩니다.