命名空间
变体
操作

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

来自 cppreference.cn
< 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 转换为字符串视图 sv,如同通过 std::basic_string_view<CharT, Traits> sv = t;,然后附加字符串视图 sv 中的字符,如同通过 append(sv)
此重载仅当 std::is_convertible_v<const StringViewLike&,
                      std::basic_string_view<CharT, Traits>>
truestd::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

如果由于任何原因抛出异常,此函数无效果(强异常安全保证)。

[编辑] 注意

重载 (2) 可以接受任何隐式可转换为 CharT 的类型。对于 std::string,其中 CharTchar,可接受的类型集包括所有算术类型。这可能会产生意外的效果。

[编辑] 示例

#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++ 标准。

缺陷报告 应用于 发布时的行为 正确的行为
LWG 847 C++98 没有异常安全保证 添加了强异常安全保证
LWG 2946 C++17 重载 (5) 在某些情况下导致歧义 通过使其成为模板来避免

[编辑] 参阅

将字符追加到末尾
(public member function) [编辑]