Namespaces
Variants

std::basic_string<CharT,Traits,Allocator>::operator+=

ja.cppreference.net より
 
 
 
std::basic_string
 
basic_string& operator+=( const basic_string& str );
(1) (constexpr C++20以降)
basic_string& operator+=( CharT ch );
(2) (constexpr C++20以降)
basic_string& operator+=( const CharT* s );
(3) (constexpr C++20以降)
basic_string& operator+=( std::initializer_list<CharT> ilist );
(4) (C++11以降)
(constexpr C++20以降)
template< class StringViewLike >
basic_string& operator+=( const StringViewLike& t );
(5) (C++17以降)
(constexpr C++20以降)

文字列に追加の文字を加えます。

1) 文字列 str を追加します。
2) 文字 ch を追加します。
3) s が指すヌル終端文字列を追加します。
4) 初期化子リスト ilist 内の文字を追加します。
5) t を sv により文字列ビュー std::basic_string_view<CharT, Traits> sv = t; に暗黙に変換し、その後 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 である場合にのみオーバーロード解決に参加します。

パラメータ

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 ) が一部の場合に曖昧性を引き起こした テンプレート化することで回避

関連項目

末尾に文字を追加する
(公開メンバ関数)