|
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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] |