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 > inline 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 > inline 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) (1,3,5) 的对应示例
std::in_place
、std::in_place_type
和 std::in_place_index
是消歧义标签,能传递给构造函数,以指示应该原位构造所含对象,以及(对于后二者)要构造的对象的类型。标准库
以下标准库类型使用 (1-6) 作为消歧义标签:
(C++17) |
可保有任何可复制构造 (CopyConstructible) 类型的实例的对象。 (类) |
(C++23) |
含有一个预期值或错误值的包装器 (类模板) |
(C++23) |
任意可调用对象的仅移动包装,支持给定调用签名中的限定符 (类模板) |
(C++17) |
可能或可能不保有一个对象的包装器 (类模板) |
(C++17) |
类型安全的可辨识联合体 (类模板) |
参阅
(C++23) |
指出范围的元素有序且唯一 (标签) |
指出范围的元素有序(不要求唯一) (标签) |