std::basic_string<CharT,Traits,Allocator>::operator+=
From cppreference.com
< cpp | string | basic string
| basic_string& operator+=( const basic_string& str ); |
(1) | (C++20 以降 constexpr) |
| basic_string& operator+=( CharT ch ); |
(2) | (C++20 以降 constexpr) |
| basic_string& operator+=( const CharT* s ); |
(3) | (C++20 以降 constexpr) |
| basic_string& operator+=( std::initializer_list<CharT> ilist ); |
(4) | (C++11以降) (C++20 以降 constexpr) |
| template< class StringViewLike > basic_string& operator+=( const StringViewLike& t ); |
(5) | (C++17以降) (C++20 以降 constexpr) |
文字列に、追加の文字を連結します。
1) 文字列 str を連結します。
2) 文字 ch を連結します。
3) ヌル終端の文字列表現 s が指す文字列を連結します。
4) 初期化リスト ilist の文字を連結します。
5) t を、あたかも std::basic_string_view<CharT, Traits> sv = t; のように文字列ビュー sv に暗黙的に変換し、その文字列ビュー sv の文字を、あたかも append(sv) のように連結します。
このオーバーロードは、std::is_convertible_v<const StringViewLike&,
std::basic_string_view<CharT, Traits>> が true であり、かつ std::is_convertible_v<const StringViewLike&, const CharT*> が false の場合にのみ、オーバーロード解決に参加します。
std::basic_string_view<CharT, Traits>> が true であり、かつ std::is_convertible_v<const StringViewLike&, const CharT*> が false の場合にのみ、オーバーロード解決に参加します。
目次 |
[編集] パラメータ
| str | - | 追加する文字列 |
| 文字 | - | 連結する文字値 |
| s | - | 連結するヌル終端の文字列へのポインタ |
| ilist | - | 連結する文字を含む std::initializer_list |
| t | - | 連結する文字を含むオブジェクト(std::basic_string_view に変換可能) |
[編集] 戻り値
*this
[編集] 計算量
標準の計算量保証はありません。典型的な実装は、std::vector::insert() と同様に動作します。
[編集] 例外
操作によりsize()がmax_size()を超える場合、std::length_errorを送出します。
何らかの理由で例外がスローされた場合、この関数は効果がありません(強力な例外安全保証)。
[編集] 注記
オーバーロード (2) は、CharT に暗黙的に変換可能な任意の型を受け入れることができます。std::string(CharT は char)の場合、受け入れ可能な型にはすべての算術型が含まれます。これは意図しない影響を与える可能性があります。
[編集] 例
このコードを実行
#include <iomanip> #include <iostream> #include <string> int main() { std::string str; // reserve sufficient storage space to avoid memory reallocation str.reserve(50); std::cout << std::quoted(str) << '\n'; // empty string str += "This"; std::cout << std::quoted(str) << '\n'; str += std::string(" is "); std::cout << std::quoted(str) << '\n'; str += 'a'; std::cout << std::quoted(str) << '\n'; str += {' ', 's', 't', 'r', 'i', 'n', 'g', '.'}; std::cout << std::quoted(str) << '\n'; str += 69.96; // Equivalent to str += static_cast<char>(69.96); // 'E' (ASCII code 69) is appended by overload (2), // which might not be the intent. // To add a numeric value, consider std::to_string(): str += std::to_string(1729); std::cout << std::quoted(str) << '\n'; }
出力
"" "This" "This is " "This is a" "This is a string." "This is a string.E1729"
[編集] 不具合報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 847 | C++98 | 例外安全性保証がなかった | 強力な例外安全性保証を追加 |
| LWG 2946 | C++17 | (5) のオーバーロードは、一部のケースで曖昧さを引き起こしました。 | テンプレートにすることで回避されました。 |
[編集] 関連項目
| 末尾に文字を追加する (public member function) |