我如何获得一个非空的可选项,其中的值是默认构造的?

Enr*_*lis 0 c++ default-constructor optional c++17

假设我有一个默认构造的,因此为空ov的 type对象std::optional<std::vector<int>>

是的,std::vector可以在没有帮助的情况下表达空虚的概念std::optional,但请耐心等待。

然后让我们说,基于某种逻辑,我决定我必须用一个向量填充它,我想在这个向量上push_back一个一个元素。我该怎么办?

在我看来,以下内容有点难看:

ov = decltype(ov)::value_type{};
ov.push_back(/* something */);
ov.push_back(/* something else */);
Run Code Online (Sandbox Code Playgroud)

这真的是解决问题的方法吗?

Nic*_*las 6

对于任何可默认构造的类型T,您可以optional<T>使用默认构造的Tvia创建std::optional<T>(std::in_place)。这将执行没有参数的就地构造。

如果你已经有这样的optional<T>实例,你可以简单地调用obj.emplace()它。