【发布时间】:2019-04-29 16:16:01
【问题描述】:
循环一个空的 Boost.PropertyTree 的子节点通常是一个空操作:
ptree empty;
for (auto const& elements : empty)
{
std::cout << "child\n"; // Executed 0 times, as expected
}
但有时它会因访问冲突而崩溃:
ptree empty;
for (auto const& elements : empty.get_child("non-existent", ptree{})))
{
std::cout << "child\n";
}
访问冲突读取位置 0xFFFFFFFFFFFFFFFF。
(在
basic_ptree<K, D, C>::begin() const内)
现在empty 显然没有子“不存在”,但提供了一个默认值 (ptree{})。我们从第一个例子中知道循环一个空集合是可以的。
usual way to detect a read failure 不起作用,因为这是 Boost.PropertyTree 中的访问冲突/未定义行为。
如何区分第一种和第二种类型的空属性树,从而避免迭代爆炸的类型?
【问题讨论】:
标签: c++ boost boost-propertytree