std::basic_string<CharT,Traits,Allocator>:operator=
Von cppreference.com
< cpp | string | basic string
basic_string& operator=( const basic_string& str ); |
(1) | (constexpr seit C++20) |
basic_string& operator=( basic_string&& str ) noexcept(/* siehe unten */); |
(2) | (seit C++11) (constexpr seit C++20) |
basic_string& operator=( const CharT* s ); |
(3) | (constexpr seit C++20) |
basic_string& operator=( CharT ch ); |
(4) | (constexpr seit C++20) |
basic_string& operator=( std::initializer_list<CharT> ilist ); |
(5) | (seit C++11) (constexpr seit C++20) |
template<class StringViewLike> basic_string& operator=( const StringViewLike& t ); |
(6) | (seit C++17) (constexpr seit C++20) |
| basic_string& operator=( std::nullptr_t ) = delete; |
(7) | (seit C++23) |
Ersetzt den Inhalt des Strings.
1) Ersetzt den Inhalt durch eine Kopie von str. Wenn *this und str dasselbe Objekt sind, hat diese Funktion keine Auswirkung.
2) Ersetzt den Inhalt mit dem von str unter Verwendung der Move-Zuweisungssemantik von SequenceContainer.
Im Gegensatz zu anderen Move-Zuweisungen von Sequenzcontainern können Referenzen, Zeiger und Iteratoren auf Elemente von str ungültig werden.
3) Ersetzt den Inhalt mit dem von Null-terminiertem Zeichenstring, auf den s zeigt, als ob durch assign(s, Traits::length(s)).
5) Ersetzt den Inhalt mit dem von der Initialisierungsliste ilist, als ob durch assign(ilist.begin(), ilist.size()).
6) Konvertiert t implizit in eine String-Ansicht sv, als ob durch std::basic_string_view<CharT, Traits> sv = t;, und ersetzt dann den Inhalt mit dem von sv, als ob durch assign(sv).
Diese Überladung nimmt nur an der Überladungsauflösung teil, wenn std::is_convertible_v<const StringViewLike&,
std::basic_string_view<CharT, Traits>> true ist und std::is_convertible_v<const StringViewLike&, const CharT*> false ist.
std::basic_string_view<CharT, Traits>> true ist und std::is_convertible_v<const StringViewLike&, const CharT*> false ist.
7)
std::basic_string kann nicht von nullptr zugewiesen werden.Inhalt |
[edit] Parameter
| ch | - | Wert, mit dem die Zeichen des Strings initialisiert werden |
| str | - | String, der als Quelle zur Initialisierung des Strings verwendet wird |
| s | - | Zeiger auf einen Null-terminierten Zeichenstring, der als Quelle zur Initialisierung des Strings verwendet wird |
| ilist | - | std::initializer_list zum Initialisieren des Strings |
| t | - | Objekt, das in std::basic_string_view konvertierbar ist, zum Initialisieren des Strings |
[edit] Rückgabewert
*this
[edit] Komplexität
1) Linear in der Größe von str.
2) Linear in der Größe von *this (formal muss jeder
CharT zerstört werden). Wenn Allocatoren nicht gleich sind und nicht weitergegeben werden, dann auch linear in der Größe von str (Kopie muss erstellt werden).3) Linear in der Größe von s.
4) Konstant.
5) Linear in der Größe von ilist.
6) Linear in der Größe von t.
[edit] Ausnahmen
2)
noexcept-Spezifikation:
noexcept(std::allocator_traits<Allocator>::
propagate_on_container_move_assignment::value ||
Wenn die Operation dazu führen würde, dass size() max_size() überschreitet, wird std::length_error ausgelöst.
Wenn aus irgendeinem Grund eine Ausnahme ausgelöst wird, hat diese Funktion keine Auswirkungen (starkes Ausnahmesicherheitsgarantie).
[edit] Beispiel
Führen Sie diesen Code aus
#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) }
Mögliche Ausgabe
"alpha" "alpha" "alpha" "" "beta" "!" "gamma" "#"
[edit] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 847 | C++98 | Es gab keine Ausnahmesicherheitsgarantie | starke Ausnahmesicherheitsgarantie hinzugefügt |
| LWG 2063 | C++11 | Der Move-Zuweisungsoperator folgte nicht den semantischen Anforderungen von SequenceContainer |
folgt |
| LWG 2946 | C++17 | Überladung (6) verursachte in einigen Fällen Mehrdeutigkeit | vermieden durch die Erstellung als Template |
[edit] Siehe auch
konstruiert einen basic_string(public member function) | |
| weist Zeichen einem String zu (public member function) | |
| weist eine Ansicht zu (public member function of std::basic_string_view<CharT,Traits>) |