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

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 функция-элемент)[править]
close