boost::spirit指针属性是用nullptr初始化的吗?

Are boost::spirit pointer attributes initialized with nullptr?

本文关键字:初始化 nullptr spirit 指针 属性 boost      更新时间:2023-10-16

我想我在某处的调试器中看到某个指针类型的boost::spirit属性被设置为nullptr,但我没有这样做。这只是巧合还是boost::spirit实际上负责初始化指针类型属性?

目前,当我需要确定时,我在规则的开头放了一个eps [ _val = nullptr ],但很高兴知道这样我就可以省略它。

boost::spirit真的负责初始化指针类型的属性吗?

实际上,是的。

精神使用make_attribute.注释似乎表明这只会发生在语义操作中,但它实际上也在rule解析器中使用(但传递给子解析器表达式的内容可能会被转换)。

make_attribute使用boost::value_initialized特征:

以通用方式构造和初始化对象在C++中很困难。问题是有几种不同的规则适用于初始化。根据类型,新构造对象的值可以是零初始化(逻辑为 0)、默认构造(使用默认构造函数)或不确定。编写通用代码时,必须解决此问题。模板value_initialized为标量、联合和类类型的值初始化提供了一个具有一致语法的解决方案。此外,value_initialized 为有关值初始化的各种编译器问题提供了一种解决方法。此外,还提供了 const 对象(initialized_value,以避免在从value_initialized对象检索值时重复类型名称。

因此,除非代码中有任何自定义的专用化,否则默认行为确实提供值初始化。