Spec-Zone.ru › C++

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

(1)
basic_string& operator+=( const basic_string& str );
(до C++20)
constexpr basic_string& operator+=( const basic_string& str );
(с C++20)
(2)
basic_string& operator+=( CharT ch );
(до C++20)
constexpr basic_string& operator+=( CharT ch );
(с C++20)
(3)
basic_string& operator+=( const CharT* s );
(до C++20)
constexpr basic_string& operator+=( const CharT* s );
(с C++20)
(4)
basic_string& operator+=( std::initializer_list<CharT> ilist );
(с C++11)
(до C++20)
constexpr basic_string& operator+=( std::initializer_list<CharT> ilist );
(с C++20)
(5)
template< class StringViewLike >
basic_string& operator+=( const StringViewLike& t );
(с C++17)
(до C++20)
template< class StringViewLike >
constexpr basic_string& operator+=( const StringViewLike& t );
(с 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/w/cpp/string/basic_string/operator%2B%3D

Spec-Zone.ru

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