namespace std {
struct in_place_t {
explicit in_place_t() = default;
};
inline constexpr in_place_t in_place {};
}
概要
in_place_t
クラスは、オーバーロードのための空クラスである。
標準ライブラリの特定機能において、要素型のコンストラクタ引数を直接受け取って構築するための関数オーバーロードを定義するためにある。
備考
デフォルトコンストラクタにexplicit
が付いているのは、in_place_t x = {};
のように=
付きの波カッコ初期化を禁止するためである。ユーザーは通常、in_place_t
型の定数として事前定義されているin_place
を使用すればよいので、問題にはならない。
例
#include <iostream>
#include <optional>
#include <string>
int main()
{
// stringクラスのコンストラクタ引数3と'A'をとり、
// optionalクラス内でstring型のオブジェクトを生成する。
std::optional<std::string> p {std::in_place, 3, 'A'};
std::cout << p.value() << std::endl;
}
13
#include <iostream>
#include <optional>
#include <string>
int main()
{
// stringクラスのコンストラクタ引数3と'A'をとり、
// optionalクラス内でstring型のオブジェクトを生成する。
std::optional<std::string> p {std::in_place, 3, 'A'};
std::cout << p.value() << std::endl;
}
出力
AAA
バージョン
言語
- C++17
処理系
- Clang: 4.0.1 ✅
- GCC: 7.2 ✅
- ICC: ??
- Visual C++: ??