действительно ли boost :: spirit заботится об инициализации атрибутов типа указателя?
Эффективно, да.
Дух использует make_attribute
. Кажется, что комментарий указывает, что это произойдет только для семантических действий, но на самом деле он также используется внутри синтаксического анализатора rule
(но то, что передается выражениям подпаратера, может быть преобразовано).
make_attribute
использует черту boost::value_initialized
:
Создание и инициализация объектов в общем виде затруднены в C ++. Проблема в том, что есть несколько разных правил, которые применяются для инициализации. В зависимости от типа, значение вновь созданного объекта может быть инициализировано нулем (логически 0), построено по умолчанию (используя конструктор по умолчанию) или неопределено. При написании общего кода эта проблема должна быть решена. Шаблон value_initialized предоставляет решение с согласованным синтаксисом для инициализации значений скалярных типов, типов объединений и классов. Кроме того, value_initialized предлагает обходной путь для различных проблем компилятора, касающихся инициализации значения. Кроме того, предоставляется const-объект initialized_value, чтобы избежать повторения имени типа при извлечении значения из объекта value_initialized.
Итак, за исключением любых пользовательских специализаций в вашем коде, поведение по умолчанию действительно предлагает инициализацию значения.