名前空間
変種
操作

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

From cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::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 の場合にのみ、オーバーロード解決に参加します。

目次

[編集] パラメータ

str - 追加する文字列
文字 - 連結する文字値
s - 連結するヌル終端の文字列へのポインタ
ilist - 連結する文字を含む std::initializer_list
t - 連結する文字を含むオブジェクト(std::basic_string_view に変換可能)

[編集] 戻り値

*this

[編集] 計算量

標準の計算量保証はありません。典型的な実装は、std::vector::insert() と同様に動作します。

[編集] 例外

操作によりsize()max_size()を超える場合、std::length_errorを送出します。

何らかの理由で例外がスローされた場合、この関数は効果がありません(強力な例外安全保証)。

[編集] 注記

オーバーロード (2) は、CharT に暗黙的に変換可能な任意の型を受け入れることができます。std::stringCharTchar)の場合、受け入れ可能な型にはすべての算術型が含まれます。これは意図しない影響を与える可能性があります。

[編集]

#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) [編集]
English 日本語 中文(简体) 中文(繁體)