如果一个类T
有对齐要求,例如由alignas
关键字指定的,是否std::optional<T>
保证boost::optional<T>
遵守所述对齐?
如果它们只是T
object 和 a 的包装类bool initialized
,那么它们会根据需要自动对齐其T
成员,但标准和 boost 文档指出它们不能容纳任何对象并且可以很好地处理构造对象的成本。据我了解,它们不只是包含一个T
. 相反,他们似乎分配了一个缓冲区,在该缓冲区上T
手动构建或销毁。因此,C++ 语言不会自动对齐缓冲区,因为它不是T
.
那么,std::optional<T>
是否boost::optional<T>
正确对齐他们的托管T
对象?他们是否也提供optional<T>::operator new
并optional<T>::operator new[]
尊重对齐要求?