Namespaces
Variants

std::queue<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)

Fügt ein neues Element am Ende der Warteschlange hinzu. 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 Wert oder die Referenz, falls vorhanden, zurückgegeben durch den obigen Aufruf von Container :: emplace_back .

(seit C++17)

Komplexität

Identisch zur Komplexität von Container :: emplace_back .

Beispiel

#include <iostream>
#include <queue>
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::queue<S> queue;
    const S& s = queue.emplace(42, 3.14, "C++"); // für Rückgabewert C++17 erforderlich
    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 Korrektes 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 am Ende ein
(öffentliche Elementfunktion)
entfernt das erste Element
(öffentliche Elementfunktion)