std::basic_string<CharT,Traits,Allocator>:: operator+=
|
basic_string
&
operator
+
=
(
const
basic_string
&
str
)
;
|
(1) | (constexpr since C++20) |
|
basic_string
&
operator
+
=
(
CharT ch
)
;
|
(2) | (constexpr since C++20) |
|
basic_string
&
operator
+
=
(
const
CharT
*
s
)
;
|
(3) | (constexpr since C++20) |
|
basic_string
&
operator
+
=
(
std::
initializer_list
<
CharT
>
ilist
)
;
|
(4) |
(since C++11)
(constexpr since C++20) |
|
template
<
class
StringViewLike
>
basic_string & operator + = ( const StringViewLike & t ) ; |
(5) |
(since C++17)
(constexpr since C++20) |
文字列に追加の文字を追加します。
std:: basic_string_view < CharT, Traits >> が true であり、かつ std:: is_convertible_v < const StringViewLike & , const CharT * > が false である場合です。
目次 |
パラメータ
| str | - | 追加する文字列 |
| ch | - | 追加する文字値 |
| s | - | 追加するヌル終端文字列へのポインタ |
| ilist | - | std::initializer_list 追加する文字を含む |
| t | - | オブジェクト ( std::basic_string_view に変換可能) 追加する文字を含む |
戻り値
* this
計算量
標準的な計算量の保証はありません。一般的な実装は std::vector::insert() と同様の動作をします。
例外
操作によって
size()
が
max_size()
を超える場合、
std::length_error
をスローします。
何らかの理由で例外がスローされた場合、この関数は何も効果を持ちません( strong exception safety guarantee )。
注記
オーバーロード
(
2
)
は、
CharT
に暗黙的に変換可能なあらゆる型を受け入れます。
std::string
の場合、
CharT
が
char
であるため、受け入れ可能な型のセットにはすべての算術型が含まれます。これは意図しない効果をもたらす可能性があります。
例
#include <iomanip> #include <iostream> #include <string> int main() { std::string str; // メモリ再割り当てを避けるために十分なストレージ領域を予約 str.reserve(50); std::cout << std::quoted(str) << '\n'; // 空文字列 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; // str += static_cast<char>(69.96); と同等 // オーバーロード (2) によって 'E' (ASCIIコード 69) が追加されるが、 // これは意図した動作ではない可能性がある // 数値を追加するには、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 ) が一部の場合に曖昧性を引き起こした | テンプレート化することで回避 |
関連項目
|
末尾に文字を追加する
(公開メンバ関数) |