std::basic_string<CharT,Traits,Allocator>::operator+=
Материал из cppreference.com
< cpp | string | basic string
(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.
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 функция-элемент) |