std::basic_string<CharT,Traits,Allocator>::append
From cppreference.com
< cpp | string | basic string
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) |
文字列の末尾に、追加の文字を連結します。
1) 文字 ch を count 回繰り返して連結します。
2) 文字列
[s, s + count) の範囲の文字を連結します。 範囲
[s, s + count)が有効な範囲でない場合、動作は未定義です。3) return append(s, Traits::length(s)); と同等です。
4,5) 文字列ビュー t から構築された文字列ビュー sv の文字を連結します。
これらのオーバーロードは、以下のすべての条件が満たされた場合にのみオーバーロード解決に参加する。
- std::is_convertible_v<const SV&, std::basic_string_view<CharT, Traits>> は true です。
- std::is_convertible_v<const SV&, const CharT*> は false です。
4) std::basic_string_view<CharT, Traits> sv = t;
return append(sv.data(), sv.size()); と同等です。
return append(sv.data(), sv.size()); と同等です。
5) std::basic_string_view<CharT, Traits> sv = t;
return append(sv.substr(pos, count)); と同等です。
return append(sv.substr(pos, count)); と同等です。
6,7) 他の文字列 str の文字を連結します。
6) return append(str.data(), str.size()); と同等です。
|
7) return append(std::basic_string_view<CharT, Traits>
(str).substr(pos, count)); と同等です。 |
(C++20以降) |
8) return append(basic_string(first, last, get_allocator())); と同等です。
|
このオーバーロードは、 |
(C++11まで) |
|
このオーバーロードは、 |
(C++11以降) |
9) return append(ilist.begin(), ilist.size()); と同等です。
目次 |
[編集] パラメータ
| count | - | 追加する文字数 |
| 文字 | - | 追加する文字の値 |
| s | - | 追加する文字列へのポインタ |
| t | - | 追加する文字を含む、 std::basic_string_view に変換可能なオブジェクト |
| pos | - | 追加する最初の文字のインデックス |
| str | - | 追加する文字列 |
| first, last | - | 追加する文字の範囲 |
| ilist | - | 追加する文字を含む初期化リスト |
[編集] 戻り値
*this
[編集] 計算量
標準的な計算量の保証はありません。典型的な実装は、 std::vector::insert() と同様の動作をします。
[編集] 例外
操作によりsize()がmax_size()を超える場合、std::length_errorを送出します。
何らかの理由で例外がスローされた場合、この関数は効果がありません(強力な例外安全保証)。
[編集] 例
このコードを実行
#include <cassert> #include <string> int main() { std::string str = "std::string"; const char* cptr = "C-string"; const char carr[] = "range"; std::string result; // 1) Append a char 3 times. // Note: This is the only overload accepting “CharT”s. result.append(3, '*'); assert(result == "***"); // 2) Append a fixed-length C-string result.append(cptr, 5); assert(result == "***C-str"); // 3) Append a null-terminated C-string // Note: Because “append” returns *this, we can chain calls together. result.append(1, ' ').append(cptr); assert(result == "***C-str C-string"); // 6) Append a whole string result.append(1, ' ').append(str); assert(result == "***C-str C-string std::string"); // 7) Append part of a string result.append(str, 3, 2); assert(result == "***C-str C-string std::string::"); // 8) Append range result.append(&carr[2], &carr[3]); assert(result == "***C-str C-string std::string::n"); // 9) Append initializer list 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 の場合、未定義でした。 |
この場合、常に例外をスローします。 |
| LWG 2788 | C++98 | オーバーロード (8) はデフォルト構築された アロケータを使用して一時文字列を構築していました。 |
アロケータを取得します。 get_allocator() から |
| LWG 2946 | C++17 | オーバーロード (4) は、一部のケースで曖昧さを引き起こします。 | テンプレートにすることで回避されました。 |
[編集] 関連項目
| (C++23) |
範囲の文字を末尾に連結します。 (public member function) |
| 末尾に文字を追加する (public member function) | |
| 2つの文字列を連結する (関数) | |
| 2つの文字列の指定された文字数を連結する (関数) | |
| あるワイド文字列のコピーを別のワイド文字列に追加する (関数) | |
| あるワイド文字列から別のワイド文字列へ、指定された数のワイド文字を追加する (関数) |