std::piecewise_construct, std::piecewise_construct_t
Von cppreference.com
| Definiert in der Header-Datei <utility> |
||
| struct piecewise_construct_t { explicit piecewise_construct_t() = default; }; |
(1) | (seit C++11) |
| constexpr std::piecewise_construct_t piecewise_construct{}; |
(2) | (seit C++11) (inline seit C++17) |
1)
std::piecewise_construct_t ist ein leeres Klassentag-Typ, der verwendet wird, um zwischen verschiedenen Funktionen zu unterscheiden, die zwei Tupel-Argumente annehmen.2) Die Konstante
std::piecewise_construct ist eine Instanz von (1).Die Überladungen, die std::piecewise_construct_t nicht verwenden, gehen davon aus, dass jedes Tupel-Argument zum Element eines Paares wird. Die Überladungen, die std::piecewise_construct_t verwenden, gehen davon aus, dass jedes Tupel-Argument verwendet wird, um ein neues Objekt eines angegebenen Typs stückweise zu konstruieren, welches dann zum Element des Paares wird.
Inhalt |
[bearbeiten] Standardbibliothek
Die folgenden Standardbibliotheks-Typen und -Funktionen verwenden sie als Unterscheidungs-Tag
| implementiert ein binäres Tupel, d. h. ein Paar von Werten (Klassenvorlage) | |
| bereitet die Argumentliste vor, die dem für den gegebenen Typ erforderlichen Uses-Allocator-Konstruktions-Flavor entspricht (Funktions-Template) | |
ein view, der eine Sequenz aus der wiederholten Erzeugung desselben Werts besteht(Klassen-Template) (Customization Point Objekt) |
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#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); }
Ausgabe
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
[bearbeiten] Defect Reports
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 2510 | C++11 | der Standardkonstruktor war nicht explizit, was zu Mehrdeutigkeiten führen konnte | explizit gemacht |
[bearbeiten] Siehe auch
| konstruiert neues Paar (public member function von std::pair<T1,T2>)
|