std::optional 成员是否连续存储?

whi*_*hoa 3 c++ std stdoptional

我想我对如何存储可选值有点困惑。在构造包含std::optional<T>成员的类或结构时,这些成员是连续存储在内存中还是动态分配可选?例如,下面的结构是一个连续的内存块吗?

struct Material
    {
        std::string name;
        std::optional<size_t> albedo;
        std::optional<size_t> normal;
        std::optional<size_t> metalness;
        std::optional<size_t> roughness;
        std::optional<size_t> ao; // ambient occlusion
        bool hasAlphaChannel = false;
    };
Run Code Online (Sandbox Code Playgroud)

Rai*_*dex 7

optional 要求不使用动态分配。

如果一个可选项包含一个值,则保证该值作为可选对象占用空间的一部分进行分配,即永远不会发生动态内存分配。因此,即使定义了 operator*() 和 operator->() ,可选对象也建模对象,而不是指针。

https://en.cppreference.com/w/cpp/utility/optional

还有optional可能发生的成员变量和填充。所以不,它们不一定是连续的,但它们在您声明它们的对象内。