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 функция-элемент) |