我正在阅读 folly::Optional 中的代码以进行复制分配,但我不清楚调用 to 究竟是如何construct()
将值分配给可选的。具体来说,construct()
这个表达式是如何工作的?
new (const_cast<void*>(ptr)) Value(std::forward<Args>(args)...);
要解构您编写的行:
std::forward<Args>(args)...
正在执行variadic-template 完美转发。从本质上讲,这意味着对于任意数量的参数,将转发任何 r 值,依此类推。
Value(std::forward<Args>(args)...)
正在调用Value
这些参数的构造函数。
new (const_cast<void*>(ptr))
...正在调用放置新。
所以这条线的意思是,在这个特定的内存位置创建一个对象,通过转发你得到的所有参数在那里构造对象。