我想我在调试器中看到某个指针类型的boost::spirit
属性设置为nullptr
,但是我没有这样做。仅仅是巧合还是boost::spirit
实际上负责初始化指针类型的属性?
目前,当我需要确定时,我在规则的开头放了一个eps [ _val = nullptr ]
,但是很高兴知道,所以我可以忽略它。
答案 0 :(得分:2)
boost :: spirit实际上负责初始化指针类型的属性吗?
有效,是的。
精神使用make_attribute
。该注释似乎表明这只会发生在语义动作上,但实际上它也用在rule
解析器内部(但是传递给子解析器表达式的内容可能会被转换)。
make_attribute
使用boost::value_initialized
trait:
在C ++中,以通用方式构造和初始化对象是困难的。问题是有几种不同的规则适用于初始化。根据类型,可以将新建对象的值初始化为零(逻辑上为0),默认构造(使用默认构造函数)或不确定。在编写通用代码时,必须解决此问题。模板value_initialized提供了具有一致语法的解决方案,用于标量,并集和类类型的值初始化。此外,value_initialized提供了解决各种与值初始化有关的编译器问题的方法。此外,提供了一个const对象initialized_value,以避免从value_initialized对象检索值时重复类型名称。
因此,除非您的代码中定义了任何自定义的专长,否则默认行为的确会提供值初始化。