Пространства имён
Варианты
Действия

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

Материал из cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
Функции-элементы
Доступ к элементам
Итераторы
Ёмкость
Операции
basic_string::operator+=
Поиск
Константы
Правила вывода (C++17)
Функции, не являющиеся элементами
Ввод/Вывод
Сравнение
(до 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)
Вспомогательные классы
 
(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;
 
    // зервирует достаточно места для хранения, чтобы избежать перераспределения памяти
    str.reserve(50);
 
    std::cout << std::quoted(str) << '\n'; // пустая строка
 
    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; // Эквивалентно str += static_cast<char>(69.96);
                  // 'E' (ASCII код 69) добавляется перегрузкой (2),
                  // что может не быть целью
 
    // Чтобы добавить числовое значение, рассмотрите 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 функция-элемент) [править]