http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4562.html#string.view 템플릿 클래스인 basic_string_view 는 const char* 같은 상수 연속 시퀀스를 참조 할 수 있는 객체입니다. 원래의 std::basic_string은 const char* 의 암시적 변환을 지원했기 때문에, const string& 형을 인자로 받는 곳에서 const char* 타입을 사용할 시 const char* -> std::basic_string으로 암시적으로 변환되어 오버헤드를 발생했습니다. 사용자는 std::basic_string_view 를 사용하여 함수와 상호운용 해야합니다. std::basic_string_view는 따로 지정되지 않는 이상 복잡도는 O(1) 입니다.
std::basic_string 에는 const char* 형의 암시적 변환을 지원하는 생성자가 있기 때문에, abcdefg 는 func1에 들어가면서 std::basic_string으로 변환됩니다. std::basic_string_view 는 대부분 읽기만을 필요한 함수에 사용되기 때문에 문자의 첫내용과, 문자열의 길이만 멤버변수로 가지고 있습니다. std::basic_string_view가 std::basic_string으로 초기화 될때, 복잡도는 O(1) 입니다, ( std::basic_string에서 size와 data만 가져오기 때문입니다 ) std::basic_string_view가 const char* 로 초기화 될때, 복잡도는 const char*의 길이만큼 입니다. std::basic_string_view는 일반 std::basic_string 과는 다릅니다. 읽기 전용으로 만들어졌기 때문에 std::basic_string 의 멤버 함수는 포함이 되지 않는다고 생각하시면 됩니다. 대신 std::basic_string_view 만의 멤버함수가 생겨났습니다.
remove_prefix는 앞 부분부터 size 만큼 글자를 줄입니다. remove_suffix 는 뒷 부분부터 size 만큼 글자를 줄입니다. C++ 에선 std::string_view를 위한 문자열 리터럴이 추가되었습니다. "abcdefg"sv 입니다. ( 이 리터럴을 사용하려면 using namespace std::literals 가 필요합니다. ) |
'C++ > Modern' 카테고리의 다른 글
C++17) std::any (0) | 2019.02.27 |
---|---|
C++17) std::optional (0) | 2019.02.27 |
C++17) if문과 switch문에서의 초기화 (0) | 2019.02.23 |
C++14) 자료형을 통한 튜플 어드레싱 ( Tuple addressing by type ) (0) | 2019.02.22 |
C++14) 자료형이 다른 연관 컨테이너의 조회 ( Heterogeneous lookup in associative containers ) (0) | 2019.02.22 |