std::piecewise_construct, std::piecewise_construct_t
Depuis fr.cppreference.net
< cpp | utilitaire
| Défini dans l'en-tête <utility>
|
||
struct piecewise_construct_t { explicit piecewise_construct_t() = default; };
|
(1) | (depuis C++11) |
constexpr std::piecewise_construct_t piecewise_construct{};
|
(2) | (depuis C++11) (inline depuis C++17) |
1)
std::piecewise_construct_t est un type balise de classe vide utilisé pour distinguer différentes fonctions qui prennent deux arguments tuple.2) La constante
std::piecewise_construct est une instance de (1).Les surcharges qui n'utilisent pas std::piecewise_construct_t supposent que chaque argument tuple devient l'élément d'une paire. Les surcharges qui utilisent std::piecewise_construct_t supposent que chaque argument tuple est utilisé pour construire, pièce par pièce, un nouvel objet du type spécifié, qui deviendra l'élément de la paire.
Bibliothèque standard
Les types et fonctions suivants de la bibliothèque standard l'utilisent comme étiquette de désambiguïsation :
|
implémente un tuple binaire, c'est-à-dire une paire de valeurs
(modèle de classe) |
|
|
(C++20)
|
prépare la liste d'arguments correspondant au type de construction uses-allocator requis par le type donné
(modèle de fonction) |
une
view
consistant en une séquence générée en produisant répétitivement la même valeur
(modèle de classe) (objet de point de personnalisation) |
Exemple
Exécuter ce code
#include <iostream> #include <tuple> #include <utility> struct Foo { Foo(std::tuple<int, float>) { std::cout << "Constructed a Foo from a tuple\n"; } Foo(int, float) { std::cout << "Constructed a Foo from an int and a float\n"; } }; int main() { std::tuple<int, float> t(1, 3.14); std::cout << "Creating p1...\n"; std::pair<Foo, Foo> p1(t, t); std::cout << "Creating p2...\n"; std::pair<Foo, Foo> p2(std::piecewise_construct, t, t); }
Sortie :
Creating p1... Constructed a Foo from a tuple Constructed a Foo from a tuple Creating p2... Constructed a Foo from an int and a float Constructed a Foo from an int and a float
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Appliqué à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 2510 | C++11 | le constructeur par défaut était non-explicite, ce qui pouvait entraîner une ambiguïté | rendu explicite |
Voir aussi
|
construit une nouvelle paire
(fonction membre publique de
std::pair<T1,T2>
)
|