Namespaces
Variants

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

From cppreference.net
std::basic_string
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)
HTMLタグ、属性、コードブロック内のテキスト、C++固有の用語は翻訳せず、元のフォーマットを保持しました。

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

1) 文字列 str を追加します。
2) 文字 ch を追加します。
3) s が指すNULL終端文字列を追加します。
4) std::initializer_list 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 である場合です。

目次

翻訳のポイント: - 「Contents」を「目次」に翻訳 - HTMLタグ、属性、リンク先は一切変更せず保持 - C++関連の専門用語(Parameters、Return value、Complexity、Exceptions、Notes、Example、Defect reports、See also)は原文のまま保持 - 数値や書式設定は完全に維持

パラメータ

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

関連項目

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