0

我正在使用 flatbuffers - 一个序列化库。在该方案中,我定义了一个我想与 std::optional 一起使用的结构。但在编译期间我收到警告 C4324。我所了解的 flatbuffers 对生成的结构使用自定义填充。禁用警告是否安全?

警告信息是

warning C4324: 'std::_Optional_destruct_base<_Ty,true>::<unnamed-tag>': structure was padded due to alignment specifier

Visual Studio 2017,msvc 14.13.26128。

4

1 回答 1

0

FlatBuffers 生成的 C++ 结构具有显式对齐和填充,以确保它们与序列化数据格式匹配,而不是允许编译器选择这些。

我猜这里发生的事情是 astd::optional本质上是 a { T t; bool is_present; },并且由于T需要特定的对齐方式,父结构现在也需要它,并且bool需要在它之后填充。

所以这可能是良性的,可能会被沉默。我建议仅针对该警告执行此操作,仅针对使用 FlatBuffers 和 的代码将其关闭std::optional

于 2020-03-23T15:56:25.277 回答