std::basic_string<CharT,Traits,Allocator>:: operator=
|
basic_string
&
operator
=
(
const
basic_string
&
str
)
;
|
(1) | (constexpr начиная с C++20) |
|
basic_string
&
operator
=
(
basic_string
&&
str
)
noexcept ( /* см. ниже */ ) ; |
(2) |
(начиная с C++11)
(constexpr начиная с C++20) |
|
basic_string
&
operator
=
(
const
CharT
*
s
)
;
|
(3) | (constexpr начиная с C++20) |
|
basic_string
&
operator
=
(
CharT ch
)
;
|
(4) | (constexpr начиная с C++20) |
|
basic_string
&
operator
=
(
std::
initializer_list
<
CharT
>
ilist
)
;
|
(5) |
(начиная с C++11)
(constexpr начиная с C++20) |
|
template
<
class
StringViewLike
>
basic_string & operator = ( const StringViewLike & t ) ; |
(6) |
(начиная с C++17)
(constexpr начиная с C++20) |
|
basic_string
&
operator
=
(
std::
nullptr_t
)
=
delete
;
|
(7) | (начиная с C++23) |
Заменяет содержимое строки.
std:: basic_string_view < CharT, Traits >> равно true и std:: is_convertible_v < const StringViewLike & , const CharT * > равно false .
std::basic_string
не может быть присвоено значение
nullptr
.
Содержание |
Параметры
| ch | - | значение для инициализации символов строки |
| str | - | строка, используемая в качестве источника для инициализации строки |
| s | - | указатель на строку символов с нулевым завершителем для использования в качестве источника инициализации строки |
| ilist | - | std::initializer_list для инициализации строки |
| t | - | объект, преобразуемый в std::basic_string_view для инициализации строки |
Возвращаемое значение
* this
Сложность
CharT
должен быть уничтожен). Если аллокаторы не эквивалентны и не распространяются, тогда также линейно по размеру
str
(необходимо выполнить копирование).
Исключения
propagate_on_container_move_assignment
::
value
||
Если операция приведёт к тому, что
size()
превысит
max_size()
, выбрасывается
std::length_error
.
Если по какой-либо причине возникает исключение, эта функция не оказывает никакого эффекта ( гарантия строгой безопасности исключений ).
Пример
#include <iomanip> #include <iostream> #include <string> int main() { std::string str1; std::string str2{"alpha"}; // (1) operator=(const basic_string&); str1 = str2; std::cout << std::quoted(str1) << ' ' // "alpha" << std::quoted(str2) << '\n'; // "alpha" // (2) operator=(basic_string&&); str1 = std::move(str2); std::cout << std::quoted(str1) << ' ' // "alpha" << std::quoted(str2) << '\n'; // "" или "alpha" (не определено) // (3) operator=(const CharT*); str1 = "beta"; std::cout << std::quoted(str1) << '\n'; // "beta" // (4) operator=(CharT); str1 = '!'; std::cout << std::quoted(str1) << '\n'; // "!" // (5) operator=(std::initializer_list<CharT>); str1 = {'g', 'a', 'm', 'm', 'a'}; std::cout << std::quoted(str1) << '\n'; // "gamma" // (6) operator=(const T&); str1 = 35U; // эквивалентно str1 = static_cast<char>(35U); std::cout << std::quoted(str1) << '\n'; // "#" (ASCII = 35) }
Возможный вывод:
"alpha" "alpha" "alpha" "" "beta" "!" "gamma" "#"
Отчёты о дефектах
Следующие отчеты об изменениях в поведении, содержащие описания дефектов, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 847 | C++98 | не было гарантии безопасности исключений | добавлена строгая гарантия безопасности исключений |
| LWG 2063 | C++11 |
оператор перемещающего присваивания не следовал
SequenceContainer семантическим требованиям |
следует |
| LWG 2946 | C++17 | перегрузка ( 6 ) вызывала неоднозначность в некоторых случаях | устранено путем превращения в шаблон |
Смотрите также
конструирует
basic_string
(публичная функция-член) |
|
|
присваивает символы строке
(публичная функция-член) |
|
|
присваивает представление
(публичная функция-член
std::basic_string_view<CharT,Traits>
)
|