Namensräume
Varianten
Aktionen

std::piecewise_construct, std::piecewise_construct_t

Von cppreference.com
< cpp‎ | utility
 
 
Dienstprogramm-Bibliotheken
Sprachunterstützung
Typunterstützung (Basistypen, RTTI)
Bibliotheks-Feature-Test-Makros (C++20)
Programm-Dienstprogramme
Variadische Funktionen
Coroutine-Unterstützung (C++20)
Vertragsunterstützung (C++26)
Drei-Wege-Vergleich
(C++20)
(C++20)(C++20)(C++20)  
(C++20)(C++20)(C++20)

Allgemeine Hilfsmittel
Relationale Operatoren (in C++20 veraltet)
 
 
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) [edit]
bereitet die Argumentliste vor, die dem für den gegebenen Typ erforderlichen Uses-Allocator-Konstruktions-Flavor entspricht
(Funktions-Template) [edit]
ein view, der eine Sequenz aus der wiederholten Erzeugung desselben Werts besteht
(Klassen-Template) (Customization Point Objekt)[edit]

[bearbeiten] Beispiel

#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>)