Spec-Zone.ru › C++

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

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.

Если по какой-либо причине выбрасывается исключение, эта функция не оказывает никакого эффекта (гарантия строгой безопасности исключений).

Примечания

Перегрузка (2) может принимать любые типы, неявно преобразуемые в CharT. Для std::string, где CharT — это char, набор допустимых типов включает все арифметические типы. Это может привести к непреднамеренным последствиям.

Пример

#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) в некоторых случаях вызывала неоднозначность неоднозначность устранена путём преобразования перегрузки в шаблон

См. также

append
добавляет символы в конец
(открытая функция-член)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/string/basic_string/operator%2B%3D

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API