std::basic_string<CharT,Traits,Allocator>:: append
|
basic_string
&
append
(
size_type count, CharT ch
)
;
|
(1) | (C++20부터 constexpr) |
|
basic_string
&
append
(
const
CharT
*
s, size_type count
)
;
|
(2) | (C++20부터 constexpr) |
|
basic_string
&
append
(
const
CharT
*
s
)
;
|
(3) | (C++20부터 constexpr) |
|
template
<
class
SV
>
basic_string & append ( const SV & t ) ; |
(4) |
(C++17부터)
(C++20부터 constexpr) |
|
template
<
class
SV
>
basic_string
&
append
(
const
SV
&
t, size_type pos,
|
(5) |
(C++17부터)
(C++20부터 constexpr) |
|
basic_string
&
append
(
const
basic_string
&
str
)
;
|
(6) | (C++20부터 constexpr) |
| (7) | ||
|
basic_string
&
append
(
const
basic_string
&
str,
size_type pos, size_type count ) ; |
(C++14까지) | |
|
basic_string
&
append
(
const
basic_string
&
str,
size_type pos, size_type count = npos ) ; |
(C++14부터)
(C++20부터 constexpr) |
|
|
template
<
class
InputIt
>
basic_string & append ( InputIt first, InputIt last ) ; |
(8) | (C++20부터 constexpr) |
|
basic_string
&
append
(
std::
initializer_list
<
CharT
>
ilist
)
;
|
(9) |
(C++11부터)
(C++20부터 constexpr) |
문자열에 추가 문자를 덧붙입니다.
[
s
,
s
+
count
)
범위 내의 문자들을 추가합니다.
[
s
,
s
+
count
)
가 유효한 범위가 아니라면, 동작은 정의되지 않습니다.
- std:: is_convertible_v < const SV & , std:: basic_string_view < CharT, Traits >> 가 true 인 경우.
- std:: is_convertible_v < const SV & , const CharT * > 가 false 인 경우.
return append ( sv. data ( ) , sv. size ( ) ) ; .
return append ( sv. substr ( pos, count ) ) ; .
|
7)
다음 표현과 동등함:
return
append
(
std::
basic_string_view
<
CharT, Traits
>
( str ) . substr ( pos, count ) ) ; . |
(C++20부터) |
|
이 오버로드는
|
(C++11 이전) |
|
이 오버로드는
|
(C++11 이후) |
목차 |
매개변수
| count | - | 추가할 문자 수 |
| ch | - | 추가할 문자 값 |
| s | - | 추가할 문자열에 대한 포인터 |
| t | - | std::basic_string_view 로 변환 가능한 객체 (추가할 문자 포함) |
| pos | - | 추가할 첫 번째 문자의 인덱스 |
| str | - | 추가할 문자열 |
| first, last | - | 추가할 문자 범위 |
| ilist | - | 추가할 문자들을 포함하는 초기화 리스트 |
반환값
* this
복잡도
표준적인 복잡도 보장은 없으며, 일반적인 구현은 std::vector::insert() 와 유사하게 동작합니다.
예외
만약 연산으로 인해
size()
가
max_size()
를 초과하게 되면,
std::length_error
를 발생시킵니다.
어떤 이유로든 예외가 발생하면, 이 함수는 아무런 효과를 가지지 않습니다( strong exception safety guarantee ).
예제
#include <cassert> #include <string> int main() { std::string str = "std::string"; const char* cptr = "C-string"; const char carr[] = "range"; std::string result; // 1) 문자를 3번 추가 // 참고: "CharT"를 받는 유일한 오버로드입니다 result.append(3, '*'); assert(result == "***"); // 2) 고정 길이 C 문자열 추가 result.append(cptr, 5); assert(result == "***C-str"); // 3) 널 종료 C 문자열 추가 // 참고: "append"가 *this를 반환하므로 호출을 연쇄할 수 있습니다 result.append(1, ' ').append(cptr); assert(result == "***C-str C-string"); // 6) 전체 문자열 추가 result.append(1, ' ').append(str); assert(result == "***C-str C-string std::string"); // 7) 문자열의 일부 추가 result.append(str, 3, 2); assert(result == "***C-str C-string std::string::"); // 8) 범위 추가 result.append(&carr[2], &carr[3]); assert(result == "***C-str C-string std::string::n"); // 9) 초기화 리스트 추가 result.append({'p', 'o', 's'}); assert(result == "***C-str C-string std::string::npos"); }
결함 보고서
다음 동작 변경 결함 보고서는 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 847 | C++98 | 예외 안전성 보장이 없었음 | 강력한 예외 안전성 보장 추가 |
| LWG 2250 | C++98 |
오버로드
(7)
의 동작이
pos > str. size ( ) 인 경우 true 이면 정의되지 않음 |
이 경우 항상 예외를 throw함 |
| LWG 2788 | C++98 |
오버로드
(8)
가 기본 생성된
할당자를 사용하여 임시 문자열 생성 |
할당자를
get_allocator() 에서 획득 |
| LWG 2946 | C++17 | 오버로드 (4) 가 일부 경우에 모호성 발생 | 템플릿으로 만들어 회피 |
참고 항목
|
(C++23)
|
문자 범위를 끝에 추가함
(public member function) |
|
문자를 끝에 추가함
(public member function) |
|
|
두 문자열을 연결함
(function) |
|
|
두 문자열의 특정 양의 문자를 연결함
(function) |
|
|
와이드 문자열의 복사본을 다른 와이드 문자열에 추가함
(function) |
|
|
한 와이드 문자열에서 다른 와이드 문자열로 특정 양의 와이드 문자를 추가함
(function) |