Namespaces
Variants

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

From cppreference.net

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 - 要素のコンストラクタに転送する引数

戻り値

(none)

(C++17まで)

上記の Container :: emplace_back 呼び出しによって返される値または参照(存在する場合)。

(C++17以降)

計算量

Container :: emplace_back の計算量と同一です。

#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++"); // 戻り値を使用するにはC++17が必要
    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) を返す

関連項目

トップに要素を挿入
(公開メンバ関数)
トップ要素を削除
(公開メンバ関数)