Namespaces
Variants

C++ named requirements: CharTraits

From cppreference.net
C++ named requirements

CharTraits 는 주어진 문자 타입에 대한 기본적인 문자 및 문자열 연산을 추상화하는 traits 클래스입니다. 대부분의 표준 라이브러리 문자열 및 입출력 클래스들은 해당 문자 템플릿 타입 매개변수와 함께 CharTraits 템플릿 타입 매개변수를 요구합니다.

목차

요구사항

아래에 나열된 CharTraits 연산 중 어떤 것도 예외를 발생시켜서는 안 됩니다.

주어진

  • CharT , 문자 타입
  • X , CharT 타입에 대한 CharTraits 타입
  • c , d , CharT 타입의 값들
  • p , q , const CharT * 타입의 값들
  • s , CharT* 타입의 값
  • n , i , j , std::size_t 타입의 값들
  • e , f , X::int_type 타입의 값들
  • pos , X::pos_type 타입의 값
  • state , X::state_type 타입의 값
  • r , CharT 타입의 lvalue

타입

타입 의미
X::char_type CharT
X::int_type X::char_type 의 모든 유효한 값과 X :: eof ( ) 를 포함할 수 있는 타입
X::off_type X 가 입출력 클래스의 traits 템플릿 매개변수로 사용될 때 std::streamoff 가 아닌 경우 구현 정의 동작을 유발함
X::pos_type
  • 입출력 클래스에서 이 타입을 반환하는 함수들은 오류 신호를 위해 X :: pos_type ( X :: off_type ( - 1 ) ) 를 유효하지 않은 값으로 사용함
  • 이 유효하지 않은 값을 std::istream , std::ostream 또는 std::streambuf 의 이 타입 값을 취하는 어떤 멤버 함수의 인자로 사용하는 것은 정의되지 않은 행위임
  • X 가 입출력 클래스의 traits 템플릿 매개변수로 사용될 때 이 타입이 std::streampos 가 아닌 경우 구현 정의 동작을 유발함
X::state_type Destructible , CopyAssignable , CopyConstructible , DefaultConstructible

표현식

표현식 반환 타입 의미론 복잡도
X :: eq ( c, d ) bool 반환값: c d 와 동등하게 처리되어야 하는지 여부 상수
X :: lt ( c, d ) bool 반환값: c d 보다 작은 것으로 처리되는지 여부 상수 시간
X :: compare ( p, q, n ) int 반환값:
  • 0 - [ 0 , n ) 범위의 모든 i 에 대해 X :: eq ( p [ i ] , q [ i ] ) true 인 경우
  • 그렇지 않으면, 음수 값 - 다음 조건을 만족하는 경우:
    • [ 0 , n ) 범위의 어떤 j 에 대해 X :: lt ( p [ j ] , q [ j ] ) true 이고
    • [ 0 , j ) 범위의 모든 i 에 대해 X :: eq ( p [ i ] , q [ i ] ) true 인 경우
  • 그 외의 경우 양수 값
선형 시간
X :: length ( p ) std::size_t 반환값: X :: eq ( p [ i ] , CharT ( ) ) true 인 가장 작은 i 선형 시간
X :: find ( p, n, c ) const X :: char_type * 반환값:
  • [ p , p + n ) 범위 내에서 X :: eq ( * q, c ) true 인 가장 작은 q
  • 그렇지 않으면 0
선형 시간
X :: move ( s, p, n ) X::char_type*
  • [ 0 , n ) 범위의 각 i 에 대해 X :: assign ( s [ i ] , p [ i ] ) 를 수행합니다
  • [ p , p + n ) [ s , s + n ) 범위가 겹치는 경우에도 정확하게 복사합니다
  • 반환값: s
선형(Linear)
X :: copy ( s, p, n ) X::char_type*
  • 요구사항: [ p , p + n ) [ s , s + n ) 가 겹치지 않아야 함
  • 반환값: s
  • [ 0 , n ) 범위 내의 각 i 에 대해 X :: assign ( s [ i ] , p [ i ] ) 수행
선형
X :: assign ( r, d ) (사용되지 않음) r = d 를 할당함 상수
X :: assign ( s, n, c ) X::char_type*
  • [ 0 , n ) 범위의 각 i 에 대해 X :: assign ( s [ i ] , c ) 를 수행합니다.
  • 반환값: s
선형(Linear)
X :: not_eof ( e ) X::int_type 반환값:
  • e 만약 X :: eq_int_type ( e, X :: eof ( ) ) false 인 경우
  • 그렇지 않으면 X :: eq_int_type ( f, X :: eof ( ) ) false 인 값 f
상수
X :: to_char_type ( e ) X::char_type 반환값:
  • 만약 어떤 c 에 대해 X :: eq_int_type ( e, X :: to_int_type ( c ) ) true 인 경우, c
  • 그렇지 않으면 정의되지 않은 값
상수
X :: to_int_type ( c ) X::int_type 반환값: e , X::to_char_type X::eq_int_type 의 정의에 의해 제약되는 어떤 값 상수
X :: eq_int_type ( e, f ) bool
  • 모든 c d 에 대해, X :: eq ( c, d ) X :: eq_int_type ( X :: to_int_type ( c ) ,
    X :: to_int_type ( d ) )
    와 동일합니다
  • 반환값:
    • 일부 c d 에 대해 e == X :: to_int_type ( c ) 이고 f == X :: to_int_type ( d ) 인 경우 X :: eq ( c, d ) 를 반환
    • 그렇지 않고 e f 가 모두 X :: eof ( ) 의 복사본인 경우 true 를 반환
    • 그렇지 않고 e f 중 하나가 X :: eof ( ) 의 복사본이고 다른 하나가 아닌 경우 false 를 반환
    • 그 외의 경우 값은 명시되지 않음
상수 시간
X :: eof ( ) X::int_type 반환값: 모든 값 c 에 대해 X :: eq_int_type ( e, X :: to_int_type ( c ) ) false 인 값 e 상수

표준 라이브러리

CharTraits 는 다음과 같은 표준 라이브러리 클래스 템플릿에서 템플릿 타입 매개변수로 요구됩니다:

문자열
문자 시퀀스를 저장하고 조작함
(클래스 템플릿)
읽기 전용 문자열 뷰
(클래스 템플릿)
스트림
임의의 스트림 버퍼를 관리합니다
(클래스 템플릿)
주어진 추상 장치( std::basic_streambuf )를 감싸고
고수준 입력 인터페이스를 제공함
(클래스 템플릿)
고수준 파일 스트림 입력 연산을 구현함
(클래스 템플릿)
고수준 문자열 스트림 입력 연산을 구현함
(클래스 템플릿)
고정 문자 버퍼 입력 연산을 구현함
(클래스 템플릿)
주어진 추상 장치( std::basic_streambuf )를 감싸고
고수준 출력 인터페이스를 제공합니다
(클래스 템플릿)
고수준 파일 스트림 출력 연산을 구현함
(클래스 템플릿)
고수준 문자열 스트림 출력 연산을 구현함
(클래스 템플릿)
동기화된 출력 스트림 래퍼
(클래스 템플릿)
고정된 문자 버퍼 출력 연산을 구현함
(클래스 템플릿)
주어진 추상 장치( std::basic_streambuf )를 래핑하고
고수준 입출력 인터페이스를 제공함
(클래스 템플릿)
고수준 파일 스트림 입출력 연산을 구현함
(클래스 템플릿)
고수준 문자열 스트림 입출력 연산을 구현함
(클래스 템플릿)
고정된 문자 버퍼 입력/출력 연산을 구현함
(클래스 템플릿)
스트림 반복자
std::basic_istream 에서 읽어들이는 입력 반복자
(클래스 템플릿)
std::basic_ostream에 쓰기 작업을 수행하는 std::basic_ostream 출력 반복자
(클래스 템플릿)
스트림 버퍼
원시 장치를 추상화함
(클래스 템플릿)
원시 파일 장치 구현
(클래스 템플릿)
원시 문자열 장치를 구현함
(클래스 템플릿)
동기화된 출력 장치 래퍼
(클래스 템플릿)
원시 고정 문자 버퍼 장치를 구현함
(클래스 템플릿)
스트림 버퍼 반복자
std::basic_streambuf 에서 읽어들이는 입력 반복자
(클래스 템플릿)
std::basic_streambuf 에 기록하는 출력 반복자
(클래스 템플릿)


CharTraits 는 다음 표준 라이브러리의 명시적 특수화에 의해 충족됩니다: std::char_traits :

template <> class char_traits < char > ;

template <> class char_traits < wchar_t > ;
template <> class char_traits < char8_t > ;
template <> class char_traits < char16_t > ;

template <> class char_traits < char32_t > ;


(C++20부터)
(C++11부터)
(C++11부터)

결함 보고서

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

DR 적용 대상 게시된 동작 수정된 동작
LWG 335 C++98 assign 의 이항 오버로드에 대한 요구사항이
rvalue에 대한 할당을 방지하지 않음
첫 번째 인수는
lvalue만 가능함
LWG 352 C++98 X::state_type
CopyConstructible 만 요구됨
CopyAssignable
DefaultConstructible 도 요구됨
LWG 3085 C++98 X :: copy ( s, p, n ) p
[ s , s + n ) 에 없음을 요구만 함 (너무 약함) [1]
[ p , p + n )
[ s , s + n ) 이 겹치지 않아야 함을 요구
  1. [ p , p + n ) [ s , s + n ) 가 겹칠 수 있는 경우, std::memcpy 를 사용하여 X::copy 를 구현하면 이 경우 정의되지 않은 동작이 발생합니다.