命名空间
变体
操作

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

来自 cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
成员函数
元素访问
迭代器
容量
修改器
basic_string::operator+=
搜索
操作
常量
非成员函数
I/O
比较
(直到 C++20)(直到 C++20)(直到 C++20)(直到 C++20)(直到 C++20)(C++20)
数值转换
(C++11)(C++11)(C++11)
(C++11)(C++11)
(C++11)(C++11)(C++11)
(C++11)
(C++11)
文字
帮助类
推断指南 (C++17)

 
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 指向的以 null 结尾的字符字符串。
4) 追加初始化列表 ilist 中的字符。
5) 隐式将 t 转换为字符串视图 sv,就像使用 std::basic_string_view<CharT, Traits> sv = t; 一样,然后像使用 append(sv) 一样追加字符串视图 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 - 指向要追加的以 null 结尾的字符字符串的指针
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++ 标准。

DR 应用于 已发布的行为 正确的行为
LWG 847 C++98 没有异常安全保证 添加了强异常安全保证
LWG 2946 C++17 重载 (5) 在某些情况下会导致歧义 通过将其设为模板来避免此问题

[编辑] 参见

将字符追加到末尾
(公共成员函数) [编辑]