std::inplace_vector<T,N>::operator=
Depuis fr.cppreference.net
constexpr inplace_vector& operator=( const inplace_vector& other );
|
(1) | (depuis C++26) |
constexpr inplace_vector& operator=( inplace_vector&& other )
noexcept(/* see below */);
|
(2) | (depuis C++26) |
constexpr inplace_vector& operator=( std::initializer_list<T> init );
|
(3) | (depuis C++26) |
Remplace le contenu du inplace_vector.
1) Opérateur d'affectation par copie. Remplace le contenu par une copie du contenu de
other. Cet opérateur est trivial si
std::inplace_vector<T, N> a un destructeur trivial, et std::is_trivially_copy_constructible_v<T> && std::is_trivially_copy_assignable_v<T> est true.2) Opérateur d'affectation par déplacement. Remplace le contenu par celui de
other en utilisant la sémantique de déplacement (c'est-à-dire, les données dans other sont déplacées de other vers ce conteneur). other est dans un état valide mais non spécifié par la suite. Cet opérateur est trivial si
std::inplace_vector<T, N> a un destructeur trivial, et std::is_trivially_move_constructible_v<T> && std::is_trivially_move_assignable_v<T> est true. 3) Remplace le contenu par celui identifié par la liste d'initialisation
init.Paramètres
| other | - |
un autre
inplace_vector
à utiliser comme source pour initialiser les éléments du conteneur
|
| init | - | liste d'initialisation pour initialiser les éléments du conteneur |
Complexité
1,2)
Linéaire en fonction de la taille de
*
this
et
other
.
3)
Linéaire dans la taille de
*
this
et
init
.
Exceptions
2)
noexcept
spécification :
noexcept
(
N
==
0
||
(
std::
is_nothrow_move_assignable_v
<
T
>
&&
Exemple
Exécuter ce code
#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("Initialement :"); std::println("x = {}", x); std::println("y = {}", y); std::println("L'assignation par copie copie les données de x vers y :"); y = x; // surcharge (1) std::println("x = {}", x); std::println("y = {}", y); std::inplace_vector<std::string, 3> z, w{"\N{CAT}", "\N{GREEN HEART}"}; std::println("Initialement :"); std::println("z = {}", z); std::println("w = {}", w); std::println("L'assignation par déplacement déplace les données de w vers z :"); z = std::move(w); // surcharge (2) std::println("z = {}", z); std::println("w = {}", w); // w est dans un état valide mais non spécifié auto l = {4, 5, 6, 7}; std::println("Assignation de initializer_list {} à x :", l); x = l; // surcharge (3) std::println("x = {}", x); std::println("L'assignation d'un initializer_list avec une taille supérieure à N lève une exception :"); try { x = {1, 2, 3, 4, 5}; // lève une exception : (taille de la liste d'initialisation == 5) > (capacité N == 4) } catch(const std::bad_alloc& ex) { std::println("ex.what(): {}", ex.what()); } }
Sortie possible :
Initialement : x = [1, 2, 3] y = [] L'assignation par copie copie les données de x vers y : x = [1, 2, 3] y = [1, 2, 3] Initialement : z = [] w = ["🐈", "💚"] L'assignation par déplacement déplace les données de w vers z : z = ["🐈", "💚"] w = ["", ""] Assignation de initializer_list [4, 5, 6, 7] à x : x = [4, 5, 6, 7] L'assignation d'un initializer_list avec une taille supérieure à N lève une exception : ex.what(): std::bad_alloc
Voir aussi
construit le
inplace_vector
(fonction membre publique) |
|
|
assigne des valeurs au conteneur
(fonction membre publique) |