将std :: pair的const引用传递给函数

时间:2015-04-09 21:33:44

标签: c++ c++11 stl

我最近写了类似下面的内容。但是,我很困惑它设法编译。那么现在好了,我有一些问题......

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作为引用的语义是什么?

3 个答案:

答案 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

传递