GeezerVison is showing cpprefjp.github.io — std::optional::emplace - cpprefjp C++日本語リファレンス
最終更新日時:
2026年09月11日 13時06分31秒 (JST)
Akira Takahashi
が更新
履歴
編集
function template
<optional>
std:: optional:: emplace (C++17)
// optional<T>版のオーバーロード
template < class ... Args >
T & emplace ( Args && ... args ); // (1) C++17
template < class ... Args >
constexpr T & emplace ( Args && ... args ); // (1) C++23
template < class U , class ... Args >
T & emplace ( std::initializer_list < U > il , Args && ... args ); // (2) C++17
template < class U , class ... Args >
constexpr T & emplace ( std::initializer_list < U > il , Args && ... args ); // (2) C++23
// optional<T&>版のオーバーロード (C++26)
template < class U >
constexpr T & emplace ( U && u ) noexcept ( see below ); // (3) C++26
概要
要素型のコンストラクタ引数から直接構築する。
(1) : 可変個の引数をとり、それを型Tのコンストラクタ引数として渡して、この関数内で型Tの有効値を構築して保持する
(2) : 初期化子リストと可変個の引数をとり、それらを型Tのコンストラクタ引数として渡して、この関数内で型Tの有効値を構築して保持する
(3) : optional<T&>の参照先を再束縛する。変換可能な単一引数を受け取る
optional<T>では (1), (2) が定義され、optional<T&>では (3) のみが定義される。
テンプレートパラメータ制約
効果
(1), (2) : まずreset() メンバ関数を呼び出す
(3) : 参照先をuに再束縛する
戻り値
代入された有効値への参照を返す。
例外
型Tの選択されたコンストラクタが、任意の例外を送出する可能性がある。
例外安全性
型Tのコンストラクタが例外を送出した場合、*thisは有効値を含まない状態となり、元々保持していた有効値は破棄される。
備考
(2) : このオーバーロードは主に、コンテナをアロケータ付きで、初期化子リスト代入するためにある
(3) : 一時オブジェクトから参照を構築するとダングリングになるケースでは、このオーバーロードは削除定義される
例
出力
(1) : AAA
(2) :
3
1
4
バージョン
言語
処理系
参照