Namespaces
Variants

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

From cppreference.net

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

Inserta un nuevo elemento en la parte superior de la pila. El elemento se construye in-situ, es decir, no se realizan operaciones de copia o movimiento. El constructor del elemento se llama exactamente con los mismos argumentos suministrados a la función.

Efectivamente llama a c. emplace_back ( std:: forward < Args > ( args ) ... ) ; .

Contenidos

Parámetros

args - argumentos para reenviar al constructor del elemento

Valor de retorno

(ninguno)

(hasta C++17)

El valor o referencia, si lo hay, devuelto por la llamada anterior a Container :: emplace_back .

(desde C++17)

Complejidad

Idéntico a la complejidad de Container :: emplace_back .

Ejemplo

#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++"); // para valor de retorno se requiere C++17
    std::cout << "id = " << s.id << '\n';
}

Salida:

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

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 2783 C++17 emplace devolvía reference , rompiendo la compatibilidad con contenedores anteriores a C++17 devuelve decltype(auto)

Véase también

inserta elemento en la parte superior
(función miembro pública)
elimina el elemento superior
(función miembro pública)