为 std::optional 禁用警告 C4324 是否安全?
Is it safe to disable warning C4324 for std::optional?
我正在使用 flatbuffers - 一个序列化库。在该方案中,我定义了一个要与 std::optional 一起使用的结构。但在编译期间我收到警告 C4324。
据我了解,平面缓冲区对生成的结构使用自定义填充。
禁用警告是否安全?
警告信息是
warning C4324: 'std::_Optional_destruct_base<_Ty,true>::<unnamed-tag>': structure was padded due to alignment specifier
Visual Studio 2017,msvc 14.13.26128.
FlatBuffers 生成的 C++ 结构具有显式对齐和填充以确保它们与序列化数据格式匹配,而不是让编译器选择这些。
我猜测这里发生的是 std::optional
本质上是 { T t; bool is_present; }
,并且因为 T
需要特定对齐,父结构现在也需要它,并且bool
后面需要填充。
所以这可能是良性的,可能会被压制。不过,我建议仅针对该警告执行此操作,仅针对使用 FlatBuffers 和 std::optional
的代码将其关闭。
我正在使用 flatbuffers - 一个序列化库。在该方案中,我定义了一个要与 std::optional 一起使用的结构。但在编译期间我收到警告 C4324。 据我了解,平面缓冲区对生成的结构使用自定义填充。 禁用警告是否安全?
警告信息是
warning C4324: 'std::_Optional_destruct_base<_Ty,true>::<unnamed-tag>': structure was padded due to alignment specifier
Visual Studio 2017,msvc 14.13.26128.
FlatBuffers 生成的 C++ 结构具有显式对齐和填充以确保它们与序列化数据格式匹配,而不是让编译器选择这些。
我猜测这里发生的是 std::optional
本质上是 { T t; bool is_present; }
,并且因为 T
需要特定对齐,父结构现在也需要它,并且bool
后面需要填充。
所以这可能是良性的,可能会被压制。不过,我建议仅针对该警告执行此操作,仅针对使用 FlatBuffers 和 std::optional
的代码将其关闭。