std::inplace_vector<T,N>::operator=
Von de.cppreference.net
constexpr inplace_vector& operator=( const inplace_vector& other );
|
(1) | (seit C++26) |
constexpr inplace_vector& operator=( inplace_vector&& other )
noexcept(/* see below */);
|
(2) | (seit C++26) |
constexpr inplace_vector& operator=( std::initializer_list<T> init );
|
(3) | (seit C++26) |
Ersetzt den Inhalt des inplace_vector.
1) Kopierzuweisungsoperator. Ersetzt den Inhalt durch eine Kopie des Inhalts von
other. Dieser Operator ist trivial, wenn
std::inplace_vector<T, N> einen trivialen Destruktor hat, und std::is_trivially_copy_constructible_v<T> && std::is_trivially_copy_assignable_v<T> ist true.2) Verschiebezuweisungsoperator. Ersetzt den Inhalt durch den von
other unter Verwendung von Verschiebesemantik (d.h. die Daten in other werden von other in diesen Container verschoben). other befindet sich danach in einem gültigen, aber nicht spezifizierten Zustand. Dieser Operator ist trivial, wenn
std::inplace_vector<T, N> einen trivialen Destruktor hat, und std::is_trivially_move_constructible_v<T> && std::is_trivially_move_assignable_v<T> ist true.3) Ersetzt den Inhalt durch den durch die Initialisierungsliste
init angegebenen.Parameter
| other | - |
ein weiterer
inplace_vector
, der als Quelle zur Initialisierung der Elemente des Containers verwendet werden soll
|
| init | - | Initialisierungsliste zur Initialisierung der Elemente des Containers |
Komplexität
1,2)
Linear in der Größe von
*
this
und
other
.
3)
Linear in der Größe von
*
this
und
init
.
Ausnahmen
2)
noexcept
Spezifikation:
noexcept
(
N
==
0
||
(
std::
is_nothrow_move_assignable_v
<
T
>
&&
Beispiel
Diesen Code ausführen
#include <initializer_list> #include <inplace_vector> #include <new> #include <print> #include <ranges> #include <string> int main() { std::inplace_vector<int, 4> x({1, 2, 3}), y; std::println("Anfangs:"); std::println("x = {}", x); std::println("y = {}", y); std::println("Kopierzuweisung kopiert Daten von x nach y:"); y = x; // overload (1) std::println("x = {}", x); std::println("y = {}", y); std::inplace_vector<std::string, 3> z, w{"\N{CAT}", "\N{GREEN HEART}"}; std::println("Anfangs:"); std::println("z = {}", z); std::println("w = {}", w); std::println("Move-Zuweisung verschiebt Daten von w nach z:"); z = std::move(w); // overload (2) std::println("z = {}", z); std::println("w = {}", w); // w is in valid but unspecified state auto l = {4, 5, 6, 7}; std::println("Zuweisung von initializer_list {} an x:", l); x = l; // overload (3) std::println("x = {}", x); std::println("Zuweisung einer initializer_list mit Größe größer als N wirft eine Ausnahme:"); try { x = {1, 2, 3, 4, 5}; // throws: (initializer list size == 5) > (capacity N == 4) } catch(const std::bad_alloc& ex) { std::println("ex.what(): {}", ex.what()); } }
Mögliche Ausgabe:
Anfangs: x = [1, 2, 3] y = [] Kopierzuweisung kopiert Daten von x nach y: x = [1, 2, 3] y = [1, 2, 3] Anfangs: z = [] w = ["🐈", "💚"] Move-Zuweisung verschiebt Daten von w nach z: z = ["🐈", "💚"] w = ["", ""] Zuweisung von initializer_list [4, 5, 6, 7] an x: x = [4, 5, 6, 7] Zuweisung einer initializer_list mit Größe größer als N wirft eine Ausnahme: ex.what(): std::bad_alloc
Siehe auch
konstruiert den
inplace_vector
(öffentliche Elementfunktion) |
|
|
weist dem Container Werte zu
(öffentliche Elementfunktion) |