std::stack<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 | - | 要素のコンストラクタに転送する引数 |
戻り値
|
(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)
を返す
|
関連項目
|
トップに要素を挿入
(公開メンバ関数) |
|
|
トップ要素を削除
(公開メンバ関数) |