folly::Optional<T> 的复制分配如何工作?

How does copy assignment work in for folly::Optional<T>?

我正在阅读 folly::Optional 中用于 copy assignment 的代码,但我不清楚对 construct() 的调用究竟是如何为可选的赋值的。具体在construct()这个表达式是如何工作的?

new (const_cast<void*>(ptr)) Value(std::forward<Args>(args)...);

解构你写的那一行:

std::forward<Args>(args)... 正在执行 variadic-template perfect forwarding。本质上,这意味着任何数量的参数都将被转发到 r-value,依此类推。

Value(std::forward<Args>(args)...) 正在根据这些参数调用 Value 的构造函数。

new (const_cast<void*>(ptr)) ...正在调用 placement new.

所以这句话的意思是,在这个特定的内存位置创建一个对象,通过转发你得到的所有参数在那里构造对象。