std::in_place、std::in_place_type、std::in_place_index、std::in_place_t、std::in_place_type_t、std::in_place_index_t
来自 cppreference.com
定义在头文件 <utility> 中 |
||
struct in_place_t { explicit in_place_t() = default; }; |
(1) | (自 C++17 起) |
inline constexpr std::in_place_t in_place {}; |
(2) | (自 C++17 起) |
template< class T > struct in_place_type_t { explicit in_place_type_t() = default; }; |
(3) | (自 C++17 起) |
template< class T > constexpr std::in_place_type_t<T> in_place_type {}; |
(4) | (自 C++17 起) |
template< std::size_t I > struct in_place_index_t { explicit in_place_index_t() = default; }; |
(5) | (自 C++17 起) |
template< std::size_t I > constexpr std::in_place_index_t<I> in_place_index {}; |
(6) | (自 C++17 起) |
1,3,5) 类型/类型模板
std::in_place_t
、std::in_place_type_t
和 std::in_place_index_t
可用于构造函数的参数列表中,以匹配预期的标记。2,4,6) 对应的
std::in_place
、std::in_place_type
和 std::in_place_index
的 (1,3,5) 实例是消歧标记,可以传递给构造函数以指示包含的对象应该在原地构造,并且(对于后两者)要构造的对象的类型。[编辑] 标准库
以下标准库类型使用 (1-6) 作为消歧标记
(C++17) |
包含任何 可复制构造 类型实例的对象 (类) |
(C++23) |
包含预期值或错误值的包装器 (类模板) |
(C++23) |
任何可调用对象的仅移动包装器,它在给定调用签名中支持限定符 (类模板) |
(C++17) |
可能包含也可能不包含对象的包装器 (类模板) |
(C++17) |
类型安全的区分联合 (类模板) |
[编辑] 另请参见
(C++23) |
指示范围的元素已排序且唯一 (标记) |
指示范围的元素已排序(不强制唯一) (标记) |