Namespaces
Variants

std::stack<T,Container>:: emplace

From cppreference.net

template < class ... Args >
void emplace ( Args && ... args ) ;
(seit C++11)
(bis C++17)
template < class ... Args >
decltype ( auto ) emplace ( Args && ... args ) ;
(seit C++17)

Legt ein neues Element oben auf den Stapel. Das Element wird direkt an Ort und Stelle konstruiert, d.h. es werden keine Kopier- oder Verschiebeoperationen durchgeführt. Der Konstruktor des Elements wird mit exakt denselben Argumenten aufgerufen, die der Funktion übergeben wurden.

Ruft effektiv c. emplace_back ( std:: forward < Args > ( args ) ... ) ; auf.

Inhaltsverzeichnis

Parameter

args - Argumente, die an den Konstruktor des Elements weitergeleitet werden

Rückgabewert

(keine)

(bis C++17)

Der von obigem Aufruf zurückgegebene Wert oder Verweis, falls vorhanden, von Container :: emplace_back .

(seit C++17)

Komplexität

Identisch zur Komplexität von Container :: emplace_back .

Beispiel

#include <iostream>
#include <stack>
struct S
{
    int id;
    S(int i, double d, std::string s) : id{i}
    {
        std::cout << "S::S(" << i << ", " << d << ", \"" << s << "\");\n";
    }
};
int main()
{
    std::stack<S> stack;
    const S& s = stack.emplace(42, 3.14, "C++"); // for return value C++17 required
    std::cout << "id = " << s.id << '\n';
}

Ausgabe:

S::S(42, 3.14, "C++")
id = 42

Fehlerberichte

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 2783 C++17 emplace gab reference zurück, was die Kompatibilität mit Pre-C++17-Containern brach gibt decltype(auto) zurück

Siehe auch

fügt Element oben ein
(öffentliche Elementfunktion)
entfernt das oberste Element
(öffentliche Elementfunktion)