본문으로 바로가기
728x90
반응형

C++17이전에는 읽기 전용 스트링을 받는 함수의 매개변수 타입을 쉽게 결정할 수 없었다. const char*로 지정하면 std::string을 사용하는 클라이언트에서 c_str( )나 data( )를 이용하여 string을 const char*로 변환해서 호출해야 한다. 이렇게 하면 std::string의 객체지향 속성과 여기서 제공하는 헬퍼 메서드를 제대로 활용할 수 없다.

이러한 문제를 해결하기 위해서는 C++17부터 추가된 std::string_view를 사용하면 된다.

std::string_view

- 헤더: <sring_view>

- 클래스 템플릿: std::base_string_view

- 추가 메서드:
remove_prefix(size_t), remove_suffix(size_t) 
   → 지정한 오프셋만큼 스트링의 시작 포인터를 앞으로 당기거나 끝 포인터를 뒤로 미뤄서 스트링을 축소하는 기능
- 유의사항: string과 string_view를 서로 연결/결합할 수 없다. 

- 리터널:
표준 사용자 정의 리터널인 'sv'를 사용하면 스트링 리터널을 std::string_view로 만들 수있다.
   ex) auto string1 = "Love my blog a lot"sv ;  // auto type: string_view
   ex) auto string2 = "Love my blog a lot"s ;   // auto type: string
   ex) auto string3 = "Love my blog a lot" ;    // auto type: const char*


- 특징:
대부분 값으로 전달(Pass-By-Value)한다.
   → 스트링에 대한 포인터와 길이만 갖고 있어서 복사하는데 오버헤드가 적기 때문이다.


string_view는 실제로 const string& 대신 사용할 수 있으며 오버헤드도 없다. 다시 말해 스트링을 복사하지 않는다. string_view의 인터페이스는 c_str( )이 없고 data( )는 똑같이 제공한다.

 

 

 

출처: 전문가를 위한 C++

728x90
반응형