Abseil Tip #1: string_view의 활용 방법과 이점

string_view란 무엇이고, 왜 중요한가?

C++에서 문자열을 인자로 받는 함수를 작성할 때, 주로 다음 세 가지 방식 중 하나를 사용합니다:

  1. C 스타일 방식

    CPP
    void TakesCharStar(const char* s);
    클릭하여 더 보기
  2. 이전 C++ 표준 방식

    CPP
    void TakesString(const std::string& s);
    클릭하여 더 보기
  3. C++17 이후 도입된 string_view 방식

    • Abseil 라이브러리 사용: absl::string_view
    • C++17 표준 사용: std::string_view
    CPP
    void TakesStringView(absl::string_view s);
    void TakesStringView(std::string_view s);
    클릭하여 더 보기

문제점 및 string_view 도입 이유

string_view의 특징

언제 string_view를 사용해야 하는가?

추가 팁

  1. string_view는 작은 값이므로 함수 인자로 전달할 때 값 복사(pass by value) 방식이 권장됩니다.
  2. string_viewNUL 종료되지 않은 문자열을 처리하므로, printf("%s\n", sv.data());와 같은 방식으로 출력하는 것은 안전하지 않습니다.
    CPP
    absl::PrintF("%s\n", sv);
    클릭하여 더 보기
  3. string_view로그 출력에서도 사용할 수 있습니다:
    CPP
    LOG(INFO) << "Took '" << sv << "'";
    클릭하여 더 보기
  4. 기존 코드에서 const std::string&const char*를 받는 함수를 string_view로 변경할 경우, 대부분 안전하게 사용할 수 있지만, 함수 포인터를 사용하는 경우 타입 불일치 문제가 발생할 수 있습니다.
  5. string_viewconstexpr 생성자와 단순한 소멸자를 가지므로, 전역 변수나 상수로 사용할 때 유용합니다.

결론

string_view는 C++에서 효율적으로 문자열을 다룰 수 있는 도구로, 특히 기존의 const char*std::string 방식의 단점을 보완합니다. 다만, 데이터의 수명 관리가 중요하기 때문에, 적절한 상황에서 사용하는 것이 필요합니다.

reference

https://github.com/abseil/abseil.github.io/blob/master/_posts/2017-09-26-totw-1.md

라이선스

저작자: Jaehun Ryu

링크: https://jaehun.me/posts/abseil-tip-1-string_view%EC%9D%98-%ED%99%9C%EC%9A%A9-%EB%B0%A9%EB%B2%95%EA%B3%BC-%EC%9D%B4%EC%A0%90/

라이선스: CC BY 4.0

이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스에 따라 이용할 수 있습니다. 출처를 밝히면 상업적 목적을 포함해 자유롭게 이용 가능합니다.

댓글

검색 시작

검색어를 입력하세요

↑↓
ESC
⌘K 단축키