在线文档教程
C++
应用 | Utilities

std::variant::emplace

STD::变体::Emplace

template 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。

http://en.cppreference.com/w/cpp/实用程序/Variable/emplace