std::variant::emplace
template <class T, class... Args> T& emplace(Args&&... args); | (1) | (since C++17) |
---|---|---|
template <class T, class U, class... Args> T& emplace(std::initializer_list<U> il, Args&&... args); | (2) | (since C++17) |
template <size_t I, class... Args> std::variant_alternative_t<I, variant>& emplace(Args&&... args); | (3) | (since C++17) |
template <size_t I, class U, class... Args> std::variant_alternative_t<I, variant>& emplace(std::initializer_list<U> il, Args&&... args); | (4) | (since C++17) |
在现有的variant
对象。
1%29相当于emplace<I>(std::forward<Args>(args)...)
,在哪里I
的基于零的索引。T
在Types...
。此重载只参与以下情况下的过载解决方案:std::is_constructible_v<T, Args...>
是true
,和T
只发生一次Types...
2%29相当于emplace<I>(il,std::forward<Args>(args)...)
,在哪里I
的基于零的索引。T
在Types...
。此重载只参与以下情况下的过载解决方案:std::is_constructible_v<T, std::initializer_list<U>&, Args...>
是true
,和T
只发生一次Types...
3%29首先,销毁当前包含的值%28(如果有%29)。然后直接初始化包含的值,就像构造类型的值一样。T_I
与争论std::forward<Args>(args)...
如果抛出异常,*this
可能成为无价值[医]通过[医]例外。此重载只参与以下情况下的过载解决方案:std::is_constructible_v<T_I, Args...>
是true
如果I
不少于sizeof...(Types)
...
4%29首先,销毁当前包含的值%28(如果有%29)。然后直接初始化包含的值,就像构造类型的值一样。T_I
与争论il,std::forward<Args>(args)...
如果抛出异常,*this
可能成为无价值[医]通过[医]例外。此重载只参与以下情况下的过载解决方案:std::is_constructible_v<T_I, initializer_list<U>&, Args...>
是true
如果I
不少于sizeof...(Types)
...
参数
args | - | constructor arguments to use when constructing the new value |
---|---|---|
il | - | initializer_list argument to use when constructing the new value |
返回值
对新包含值的引用。
例外
1-4%29在初始化包含的值期间引发的任何异常。
例
另见
operator= | assigns a variant (public member function) |
---|
© cppreference.com
在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com