std::queue<T,Container>::emplace
template< class... Args > void emplace( Args&&... args ); |
(с C++11) (до C++17) | |
template< class... Args > decltype(auto) emplace( Args&&... args ); | (с C++17) |
Добавляет новый элемент в конец очереди. Элемент создается на месте, то есть не выполняются операции копирования или перемещения. Конструктор элемента вызывается с теми же аргументами, что и функция.
Эффективно вызывает c.emplace_back(std::forward<Args>(args)...);.
Параметры
| args | - | аргументы для передачи в конструктор элемента |
Возвращаемое значение
| (ничего) | (до C++17) |
| Значение или ссылка, если таковые имеются, возвращаемые вызовом | (с C++17) |
Сложность
Идентична сложности Container::emplace_back.
Пример
#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++"); // for return value C++17 required
std::cout << "id = " << s.id << '\n';
}Вывод:
S::S(42, 3.14, "C++") id = 42
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применено к | Поведение, как опубликовано | Корректное поведение |
|---|---|---|---|
| LWG 2783 | C++17 |
emplace возвращало reference, нарушая совместимость с контейнерами до C++17 | возвращает decltype(auto) |
См. также
| вставляет элемент в конец (публичный метод-член) |
|
| удаляет первый элемент (публичный метод-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/container/queue/emplace