std::basic_string<CharT,Traits,Allocator>:assign
Von cppreference.com
< cpp | string | basic string
basic_string& assign( const basic_string& str ); |
(1) | (constexpr seit C++20) |
basic_string& assign( basic_string&& str ) noexcept(/* siehe unten */); |
(2) | (seit C++11) (constexpr seit C++20) |
basic_string& assign( size_type count, CharT ch ); |
(3) | (constexpr seit C++20) |
basic_string& assign( const CharT* s, size_type count ); |
(4) | (constexpr seit C++20) |
basic_string& assign( const CharT* s ); |
(5) | (constexpr seit C++20) |
template< class SV > basic_string& assign( const SV& t ); |
(6) | (seit C++17) (constexpr seit C++20) |
template< class SV > basic_string& assign( const SV& t, |
(7) | (seit C++17) (constexpr seit C++20) |
| (8) | ||
| basic_string& assign( const basic_string& str, size_type pos, size_type count ); |
(bis C++14) | |
basic_string& assign( const basic_string& str, size_type pos, size_type count = npos); |
(seit C++14) (constexpr seit C++20) |
|
template< class InputIt > basic_string& assign( InputIt first, InputIt last ); |
(9) | (constexpr seit C++20) |
basic_string& assign( std::initializer_list<CharT> ilist ); |
(10) | (seit C++11) (constexpr seit C++20) |
Ersetzt den Inhalt des Strings.
1) Entspricht return *this = str;.
2) Entspricht return *this = std::move(str);.
3) Ersetzt den Inhalt durch count Kopien des Zeichens ch.
Entspricht clear(); resize(n, c); return *this;.
4) Ersetzt den Inhalt durch Kopien der Zeichen im Bereich
[s, s + count). Wenn
[s, s + count) kein gültiger Bereich ist, ist das Verhalten undefiniert.5) Entspricht return assign(s, Traits::length(s));.
6,7) Ersetzt den Inhalt durch Zeichen aus einer String-Ansicht sv, die aus t konstruiert wurde.
Diese Überladungen nehmen an der Auflösungsauflösung teil, nur wenn alle folgenden Bedingungen erfüllt sind
- std::is_convertible_v<const SV&, std::basic_string_view<CharT, Traits>> ist true.
- std::is_convertible_v<const SV&, const CharT*> ist false.
6) Entspricht std::basic_string_view<CharT, Traits> sv = t;
return assign(sv.data(), sv.size());.
return assign(sv.data(), sv.size());.
7) Entspricht std::basic_string_view<CharT, Traits> sv = t;
return assign(sv.substr(pos, count));.
return assign(sv.substr(pos, count));.
8) Ersetzt den Inhalt durch Zeichen aus str.
|
Entspricht return assign(std::basic_string_view<CharT, Traits>
(str).substr(pos, count));. |
(seit C++20) |
9) Entspricht return assign(basic_string(first, last, get_allocator()));.
|
Diese Überladung nimmt nur an der Überladungsauflösung teil, wenn `InputIt` die Anforderungen eines LegacyInputIterator erfüllt. |
(seit C++11) |
10) Entspricht return assign(ilist.begin(), ilist.size());.
Inhalt |
[bearbeiten] Parameter
| str | - | String, der als Quelle zur Initialisierung der Zeichen verwendet wird |
| zählt | - | Größe des resultierenden Strings |
| ch | - | Wert zur Initialisierung der Zeichen des Strings |
| s | - | Zeiger auf eine Zeichenkette, die als Quelle zur Initialisierung des Strings verwendet wird |
| t | - | Objekt (konvertierbar zu std::basic_string_view), das zur Initialisierung der Zeichen des Strings verwendet wird |
| pos | - | Index des ersten zu verwendenden Zeichens |
| first, last | - | Bereich, aus dem die Zeichen kopiert werden |
| ilist | - | std::initializer_list zur Initialisierung der Zeichen des Strings |
[bearbeiten] Rückgabewert
*this
[bearbeiten] 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).
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#include <iostream> #include <iterator> #include <string> int main() { std::string s; // assign(size_type count, CharT ch) s.assign(4, '='); std::cout << s << '\n'; // "====" std::string const c("Exemplary"); // assign(const basic_string& str) s.assign(c); std::cout << c << " == " << s << '\n'; // "Exemplary == Exemplary" // assign(const basic_string& str, size_type pos, size_type count) s.assign(c, 0, c.length() - 1); std::cout << s << '\n'; // "Exemplar"; // assign(basic_string&& str) s.assign(std::string("C++ by ") + "example"); std::cout << s << '\n'; // "C++ by example" // assign(const CharT* s, size_type count) s.assign("C-style string", 7); std::cout << s << '\n'; // "C-style" // assign(const CharT* s) s.assign("C-style\0string"); std::cout << s << '\n'; // "C-style" char mutable_c_str[] = "C-style string"; // assign(InputIt first, InputIt last) s.assign(std::begin(mutable_c_str), std::end(mutable_c_str) - 1); std::cout << s << '\n'; // "C-style string" // assign(std::initializer_list<CharT> ilist) s.assign({'C', '-', 's', 't', 'y', 'l', 'e'}); std::cout << s << '\n'; // "C-style" }
Ausgabe
==== Exemplary == Exemplary Exemplar C++ by example C-style C-style C-style string C-style
[bearbeiten] 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 | nicht-normative Notiz besagte, dass Überladung (2) durch Tauschen implementiert werden kann |
korrigiert, um Zuweisung durch Verschieben zu erfordern |
| LWG 2250 | C++98 | das Verhalten der Überladung (8) war undefiniert, wenn pos > str.size() true ist |
wirft in diesem Fall immer eine Ausnahme |
| LWG 2579 | C++98 | Überladung (1) und der Kopierzuweisungsoperator hatten unterschiedliche Effekte |
sie haben den gleichen Effekt |
| LWG 2946 | C++17 | Überladung (6) verursachte in einigen Fällen Mehrdeutigkeit | vermieden durch die Erstellung als Template |
[bearbeiten] Siehe auch
| (C++23) |
Bereich von Zeichen einem String zuweisen (public member function) |
konstruiert einen basic_string(public member function) | |
| weist dem String Werte zu (public member function) |