在yaml cpp中保留节点引用

在yaml cpp中保留节点引用,yaml,yaml-cpp,Yaml,Yaml Cpp,当我使用yaml cpp库运行以下代码时: YAML::Node node1 = YAML::Load("{ hello: [item1, item2] }"); YAML::Node node2 = node1; node1 = node1["hello"]; std::cout << node2 << "\n"; std::cout << node1 << "\n"; YAML::node1=YAML::Load({hello:[item

当我使用yaml cpp库运行以下代码时:

YAML::Node node1 = YAML::Load("{ hello: [item1, item2] }");
YAML::Node node2 = node1;

node1 = node1["hello"];

std::cout << node2 << "\n";
std::cout << node1 << "\n";
YAML::node1=YAML::Load({hello:[item1,item2]});
YAML::Node node2=node1;
node1=node1[“你好”];

yaml cpp中的std::cout节点是引用类型,而不是值类型;但这并没有得到一致的实施。请参见项目页面上突出显示此问题的部分

在你的具体情况下,当你写

YAML::Node node2 = node1;
node1 = node1["hello"];
它使这两个引用的值相同;也就是说,你对其中一个所做的任何事情都会反映在另一个中

然后,当你写作的时候

YAML::Node node2 = node1;
node1 = node1["hello"];
它做两件事:首先,
node1[“hello”]
拉出
节点中的
“hello”
键,即
[item1,item2]
。接下来,它将此分配给
节点1

这就是API实现有点不一致的地方。由于
operator=
使用引用语义处理,因此这将
node1
引用的值设置为被替换。由于
node2
node1
的别名,因此它的值也被替换