Namespaces
Variants

std:: basic_string_view

From cppreference.net
Strings library
Classes
basic_string_view
(C++17)
헤더에 정의됨 <string_view>
template <

class CharT,
class Traits = std:: char_traits < CharT >

> class basic_string_view ;
(C++17부터)

클래스 템플릿 basic_string_view 는 위치 0에서 시작하는 상수 연속 CharT 시퀀스를 참조할 수 있는 객체를 설명합니다.

basic_string_view str 에 대해, str 의 요소에 대한 포인터, 반복자, 참조는 [ str. data ( ) , str. data ( ) + str. size ( ) ) 범위 내의 포인터를 무효화하는 연산이 수행될 때 무효화됩니다.

std::basic_string_view 의 모든 특수화는 TriviallyCopyable 타입입니다.

(C++23부터)

일반적인 문자 타입에 대한 여러 typedef가 제공됩니다:

헤더에 정의됨 <string_view>
타입 정의
std::string_view (C++17) std :: basic_string_view < char >
std::wstring_view (C++17) std :: basic_string_view < wchar_t >
std::u8string_view (C++20) std :: basic_string_view < char8_t >
std::u16string_view (C++17) std :: basic_string_view < char16_t >
std::u32string_view (C++17) std :: basic_string_view < char32_t >

목차

템플릿 매개변수

CharT - 문자 타입
Traits - CharTraits 문자 타입에 대한 연산을 지정하는 클래스. std::basic_string 과 마찬가지로, Traits::char_type CharT 와 동일한 타입을 지칭해야 하며, 그렇지 않을 경우 프로그램은 ill-formed입니다.

중첩 타입

유형 정의
traits_type Traits
value_type CharT
pointer CharT *
const_pointer const CharT *
reference CharT &
const_reference const CharT &
const_iterator 구현 정의 상수 LegacyRandomAccessIterator ,
LegacyContiguousIterator (C++20 이전)
ConstexprIterator , 및 contiguous_iterator (C++20 이후)

value_type CharT 인 반복자

iterator const_iterator
const_reverse_iterator std:: reverse_iterator < const_iterator >
reverse_iterator const_reverse_iterator
size_type std::size_t
difference_type std::ptrdiff_t

참고: iterator const_iterator 는 문자열 뷰가 상수 문자 시퀀스를 참조하기 때문에 동일한 타입입니다.

Container 에 대한 모든 반복자 타입 요구사항은 basic_string_view iterator const_iterator 타입에도 동일하게 적용됩니다.

데이터 멤버

멤버 설명
const_pointer data_ 기반 시퀀스에 대한 포인터
( 설명 전용 멤버 객체* )
size_type size_ 문자 개수
( 설명 전용 멤버 객체* )

멤버 함수

생성자와 할당
basic_string_view 를 생성합니다
(public member function)
뷰를 할당함
(public member function)
반복자
시작 부분에 대한 반복자를 반환합니다
(public member function)
끝에 대한 반복자를 반환합니다
(public member function)
역방향 반복자를 시작 부분으로 반환합니다
(public member function)
끝을 가리키는 역방향 반복자를 반환합니다
(public member function)
요소 접근
지정된 문자에 접근
(public member function)
지정된 문자에 경계 검사와 함께 접근합니다
(public member function)
첫 번째 문자에 접근
(public member function)
마지막 문자에 접근
(public member function)
뷰의 첫 번째 문자에 대한 포인터를 반환합니다
(public member function)
용량
문자 수를 반환합니다
(public member function)
최대 문자 수를 반환합니다
(public member function)
뷰가 비어 있는지 확인합니다
(public member function)
수정자
시작 지점을 앞으로 이동하여 뷰를 축소합니다
(public member function)
뷰의 끝을 뒤로 이동시켜 뷰를 축소합니다
(public member function)
내용을 교환합니다
(public member function)
연산
문자 복사
(public member function)
부분 문자열을 반환합니다
(public member function)
두 뷰를 비교합니다
(public member function)
문자열 뷰가 주어진 접두사로 시작하는지 확인합니다
(public member function)
(C++20)
문자열 뷰가 주어진 접미사로 끝나는지 확인합니다
(public member function)
(C++23)
문자열 뷰가 주어진 부분 문자열이나 문자를 포함하는지 확인합니다
(public member function)
뷰에서 문자 찾기
(public member function)
부분 문자열의 마지막 발생 위치 찾기
(public member function)
문자들의 첫 번째 발생 위치 찾기
(public member function)
문자들의 마지막 발생 위치 찾기
(public member function)
문자 없음을 처음 찾음
(public member function)
마지막으로 문자가 존재하지 않는 위치 찾기
(public member function)

상수

[static]
특수 값. 정확한 의미는 문맥에 따라 다름
(public static member constant)

비멤버 함수

(C++17) (C++20에서 제거됨) (C++20에서 제거됨) (C++20에서 제거됨) (C++20에서 제거됨) (C++20에서 제거됨) (C++20)
두 문자열 뷰를 사전식으로 비교함
(함수 템플릿)
입력/출력
(C++17)
문자열 뷰에 대한 스트림 출력을 수행함
(함수 템플릿)

리터럴

인라인 네임스페이스에 정의됨 std::literals::string_view_literals
문자 배열 리터럴의 string view를 생성함
(함수)

헬퍼 클래스

문자열 뷰에 대한 해시 지원
(클래스 템플릿 특수화)

헬퍼 템플릿

template < class CharT, class Traits >

inline constexpr bool

ranges:: enable_borrowed_range < std :: basic_string_view < CharT, Traits >> = true ;
(C++20부터)

ranges::enable_borrowed_range 특수화는 basic_string_view borrowed_range 를 만족하도록 합니다.

template < class CharT, class Traits >

inline constexpr bool

ranges:: enable_view < std :: basic_string_view < CharT, Traits >> = true ;
(C++20 이후)

이 특수화는 ranges::enable_view basic_string_view view 를 만족하도록 합니다.

추론 가이드

(C++20부터)

참고 사항

프로그래머의 책임은 std::string_view 가 가리키는 문자 배열보다 더 오래 생존하지 않도록 보장하는 것입니다:

std::string_view good{"a string literal"};
    // "좋은" 경우: `good`은 정적 배열을 가리킵니다.
    // 문자열 리터럴은 영구 데이터 저장소에 상주합니다.
std::string_view bad{"a temporary string"s};
    // "나쁜" 경우: `bad`는 매달린 포인터를 보유합니다. 왜냐하면 std::operator""s에 의해 생성된
    // std::string 임시 객체는 문장의 끝에서 소멸되기 때문입니다.

std::basic_string_view 의 특수화들은 C++23에서 공식적으로 요구사항이 도입되기 전에도 모든 기존 구현에서 이미 사소하게 복사 가능한(trivially copyable) 타입들입니다.

기능 테스트 매크로 표준 기능
__cpp_lib_string_view 201606L (C++17) std::string_view
201803L (C++20) ConstexprIterator
__cpp_lib_string_contains 202011L (C++23) contains

예제

#include <iostream>
#include <string_view>
int main()
{
    #define A "▀"
    #define B "▄"
    #define C "─"
    constexpr std::string_view blocks[]{A B C, B A C, A C B, B C A};
    for (int y{}, p{}; y != 8; ++y, p = ((p + 1) % 4))
    {
        for (char x{}; x != 29; ++x)
            std::cout << blocks[p];
        std::cout << '\n';
    }
}

출력:

▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─
▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─
▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄
▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀
▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─
▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─
▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄
▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀

결함 보고서

다음 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 3203 C++17 멤버 함수에서 반환된 포인터, 반복자 및 참조만
무효화될 수 있음
basic_string_view
basic_string_view 요소에 대한 모든 포인터, 반복자 및 참조
무효화될 수 있음

참고 항목

문자 시퀀스를 저장하고 조작함
(클래스 템플릿)
두 문자열, 문자열과 char , 또는 문자열과 string_view 를 연결함
(함수 템플릿)
(C++20)
연속된 객체 시퀀스에 대한 비소유 뷰
(클래스 템플릿)
목록 초기화 에서 생성된 임시 배열을 참조함
(클래스 템플릿)