Namespaces
Variants

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

From cppreference.net

template < class ... Args >
void emplace ( Args && ... args ) ;
(depuis C++11)
(jusqu'à C++17)
template < class ... Args >
decltype ( auto ) emplace ( Args && ... args ) ;
(depuis C++17)

Pousse un nouvel élément au sommet de la pile. L'élément est construit sur place, c'est-à-dire qu'aucune opération de copie ou de déplacement n'est effectuée. Le constructeur de l'élément est appelé avec exactement les mêmes arguments que ceux fournis à la fonction.

Appelle effectivement c. emplace_back ( std:: forward < Args > ( args ) ... ) ; .

Table des matières

Paramètres

args - arguments à transmettre au constructeur de l'élément

Valeur de retour

(aucun)

(jusqu'à C++17)

La valeur ou référence, le cas échéant, retournée par l'appel ci-dessus à Container :: emplace_back .

(depuis C++17)

Complexité

Identique à la complexité de Container :: emplace_back .

Exemple

#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++"); // pour la valeur de retour C++17 requis
    std::cout << "id = " << s.id << '\n';
}

Sortie :

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

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 S'applique à Comportement publié Comportement corrigé
LWG 2783 C++17 emplace retournait reference , rompant la compatibilité avec les conteneurs pré-C++17 retourne decltype(auto)

Voir aussi

insère un élément au sommet
(fonction membre publique)
supprime l'élément du sommet
(fonction membre publique)