|
|
|
basic_string& operator=(const basic_string& str); | (1) | (constexpr since C++20) |
basic_string& operator=( basic_string&& str) noexcept(/* see below */); | (2) | (since C++11) (constexpr since C++20) |
basic_string& operator=(const CharT* s); | (3) | (constexpr since C++20) |
basic_string& operator=( CharT ch); | (4) | (constexpr since C++20) |
basic_string& operator=(std::initializer_list<CharT> ilist); | (5) | (since C++11) (constexpr since C++20) |
template<class StringViewLike> basic_string& operator=(const StringViewLike& t); | (6) | (since C++17) (constexpr since C++20) |
basic_string& operator=(std::nullptr_t)= delete; | (7) | (since C++23) |
Replaces the contents of the string.
std::basic_string
cannot be assigned fromnullptr.Contents |
ch | - | value to initialize characters of the string with |
str | - | string to be used as source to initialize the string with |
s | - | pointer to a null-terminated character string to use as source to initialize the string with |
ilist | - | std::initializer_list to initialize the string with |
t | - | object convertible tostd::basic_string_view to initialize the string with |
*this
CharT
has to be destroyed). If allocators do not compare equal and do not propagate, then also linear in the size ofstr (copy must be made). propagate_on_container_move_assignment::value||
If the operation would causesize()
to exceedmax_size()
, throwsstd::length_error.
If an exception is thrown for any reason, this function has no effect (strong exception safety guarantee).
#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';// "" or "alpha" (unspecified) // (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;// equivalent to str1 = static_cast<char>(35U);std::cout<<std::quoted(str1)<<'\n';// "#" (ASCII = 35)}
Possible output:
"alpha" "alpha""alpha" """beta""!""gamma""#"
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 847 | C++98 | there was no exception safety guarantee | added strong exception safety guarantee |
LWG 2063 | C++11 | the move assignment operator did not follow SequenceContainer's semantic requirement | follows |
LWG 2946 | C++17 | overload(6) caused ambiguity in some cases | avoided by making it a template |
constructs abasic_string (public member function)[edit] | |
assign characters to a string (public member function)[edit] | |
assigns a view (public member function of std::basic_string_view<CharT,Traits> )[edit] |