Безопасно ли отключить предупреждение C4324 для std :: необязательно? - PullRequest
0 голосов
/ 23 марта 2020

Я использую flatbuffers - библиотеку сериализации. В схеме я определяю структуру, которую я хочу использовать с std :: необязательным. но во время компиляции я получаю предупреждение C4324. Что я понимаю, плоские буферы используют пользовательские отступы для сгенерированных структур. Безопасно ли отключать предупреждение?

Предупреждающее сообщение:

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

Visual Studio 2017, msv c 14.13.26128.

1 Ответ

0 голосов
/ 23 марта 2020

Сгенерированные FlatBuffers структуры C ++ имеют явное выравнивание и заполнение, чтобы гарантировать, что они соответствуют сериализованному формату данных, а не позволяют компилятору выбирать их.

Я предполагаю, что здесь происходит, что std::optional по сути является { T t; bool is_present; }, и поскольку T требует определенного выравнивания c, родительская структура теперь также требует его, и bool требует заполнения после него.

Так что это, вероятно, доброкачественно и может вероятно, чтобы заставить замолчать. Я бы рекомендовал делать это только для этого предупреждения, хотя отключать его только для кода, который использует FlatBuffers и std::optional.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...