C++ named requirements: CharTraits
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::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 |
반환값:
|
선형 시간 |
| X :: length ( p ) | std::size_t | 반환값: X :: eq ( p [ i ] , CharT ( ) ) 가 true 인 가장 작은 i | 선형 시간 |
| X :: find ( p, n, c ) | const X :: char_type * |
반환값:
|
선형 시간 |
| X :: move ( s, p, n ) |
X::char_type*
|
|
선형(Linear) |
| X :: copy ( s, p, n ) |
X::char_type*
|
|
선형 |
| X :: assign ( r, d ) | (사용되지 않음) | r = d 를 할당함 | 상수 |
| X :: assign ( s, n, c ) |
X::char_type*
|
|
선형(Linear) |
| X :: not_eof ( e ) |
X::int_type
|
반환값:
|
상수 |
| X :: to_char_type ( e ) |
X::char_type
|
반환값:
|
상수 |
| X :: to_int_type ( c ) |
X::int_type
|
반환값:
e
,
X::to_char_type
와
X::eq_int_type
의 정의에 의해 제약되는 어떤 값
|
상수 |
| X :: eq_int_type ( e, f ) | bool |
|
상수 시간 |
| X :: eof ( ) |
X::int_type
|
반환값: 모든 값 c 에 대해 X :: eq_int_type ( e, X :: to_int_type ( c ) ) 가 false 인 값 e | 상수 |
표준 라이브러리
CharTraits 는 다음과 같은 표준 라이브러리 클래스 템플릿에서 템플릿 타입 매개변수로 요구됩니다:
문자열 |
|
|
문자 시퀀스를 저장하고 조작함
(클래스 템플릿) |
|
|
(C++17)
|
읽기 전용 문자열 뷰
(클래스 템플릿) |
스트림 |
|
|
임의의 스트림 버퍼를 관리합니다
(클래스 템플릿) |
|
|
주어진 추상 장치(
std::basic_streambuf
)를 감싸고
고수준 입력 인터페이스를 제공함 (클래스 템플릿) |
|
|
고수준 파일 스트림 입력 연산을 구현함
(클래스 템플릿) |
|
|
고수준 문자열 스트림 입력 연산을 구현함
(클래스 템플릿) |
|
|
(C++23)
|
고정 문자 버퍼 입력 연산을 구현함
(클래스 템플릿) |
|
주어진 추상 장치(
std::basic_streambuf
)를 감싸고
고수준 출력 인터페이스를 제공합니다 (클래스 템플릿) |
|
|
고수준 파일 스트림 출력 연산을 구현함
(클래스 템플릿) |
|
|
고수준 문자열 스트림 출력 연산을 구현함
(클래스 템플릿) |
|
|
(C++20)
|
동기화된 출력 스트림 래퍼
(클래스 템플릿) |
|
(C++23)
|
고정된 문자 버퍼 출력 연산을 구현함
(클래스 템플릿) |
|
주어진 추상 장치(
std::basic_streambuf
)를 래핑하고
고수준 입출력 인터페이스를 제공함 (클래스 템플릿) |
|
|
고수준 파일 스트림 입출력 연산을 구현함
(클래스 템플릿) |
|
|
고수준 문자열 스트림 입출력 연산을 구현함
(클래스 템플릿) |
|
|
(C++23)
|
고정된 문자 버퍼 입력/출력 연산을 구현함
(클래스 템플릿) |
스트림 반복자 |
|
|
std::basic_istream
에서 읽어들이는 입력 반복자
(클래스 템플릿) |
|
|
std::basic_ostream에 쓰기 작업을 수행하는
std::basic_ostream
출력 반복자
(클래스 템플릿) |
|
스트림 버퍼 |
|
|
원시 장치를 추상화함
(클래스 템플릿) |
|
|
원시 파일 장치 구현
(클래스 템플릿) |
|
|
원시 문자열 장치를 구현함
(클래스 템플릿) |
|
|
(C++20)
|
동기화된 출력 장치 래퍼
(클래스 템플릿) |
|
(C++23)
|
원시 고정 문자 버퍼 장치를 구현함
(클래스 템플릿) |
스트림 버퍼 반복자 |
|
|
std::basic_streambuf
에서 읽어들이는
입력 반복자
(클래스 템플릿) |
|
|
std::basic_streambuf
에 기록하는 출력 반복자
(클래스 템플릿) |
|
CharTraits
는 다음 표준 라이브러리의 명시적 특수화에 의해 충족됩니다:
std::char_traits
:
|
template
<>
class
char_traits
<
char
>
;
template
<>
class
char_traits
<
wchar_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
)
이 겹치지 않아야 함을 요구
|
-
↑
[p,p + n)와[s,s + n)가 겹칠 수 있는 경우, std::memcpy 를 사용하여X::copy를 구현하면 이 경우 정의되지 않은 동작이 발생합니다.