我最近写了类似下面的内容。但是,我很困惑它设法编译。那么现在好了,我有一些问题......
void tree_walk(const std::pair<tree, node> &tree_root)
{
tree t = tree_root.first;
node current = tree_root.second;
// code which walks the tree, updating current as we go along.
}
我想知道是否调用tree.first复制树?传递std :: pair作为引用的语义是什么?
答案 0 :(得分:5)
tree_rooting.first
不会复制任何内容,但
tree t = tree_root.first;
一样。如果您不想复制树,可以执行
const tree &t = tree_root.first;
回答第二个问题:您正确地将pair
作为const
引用传递给了该函数。如果您想修改输入,只需忽略函数签名中的const
即可传递非const
引用。
答案 1 :(得分:1)
我没有看到这里令人困惑的是什么。你通过const引用传递了一对,它包含一个树和一个节点。然后,您创建了树和节点的本地副本,然后用它们做了一些事情。 const引用的pair
的语义与const引用的任何其他类型完全相同。
答案 2 :(得分:0)
在您的代码中,树被复制到:
tree t = tree_root.first
如果您不想更改对中的值,请将其作为 const 传递,如果要更改值,则执行不将其作为 const
传递