boost :: spirit指针属性是否已使用nullptr初始化?

时间:2018-09-12 21:51:27

标签: c++ pointers boost-spirit

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

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

1 个答案:

答案 0 :(得分:2)

  

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

有效,是的。

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

make_attribute使用boost::value_initialized trait

  

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

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