假设我们有一个变量
std::optional<T> x;
std::optional<T>
某种类型的类型T
。如果我想调用T
inside的构造函数x
并对其进行初始化,我可以调用成员函数std::optional::emplace
。据我所知,这个成员函数检查实例是否已经存在(即bool(x)
计算结果为true
),如果是这样,它首先销毁先前构造的实例,然后使用提供的构造函数和参数重新初始化它。
我想知道是否可以只进行初始化而不进行这种检查和销毁。在处理 时std::optional
,首先检查实例是否存在然后根据结果进行一些单独的工作似乎很常见。因此,似乎有理由认为,当我们需要在内部放置一个实例时std::optional
,我们已经知道它不包含任何已初始化的实例。std::optional::emplace
因此,提供一个不检查和破坏先前实例但std::optional
没有这样的成员函数的“不安全版本”似乎是合理的。有没有办法做到这一点?
也许,如果有一些关于内存布局的保证std::optional
(我猜不是),那么我可以直接调用放置new
运算符......