返回一个矢量作为参数

时间:2012-10-26 21:20:55

标签: c++ vector reference

我有这些功能:

vector<int> foo1() {
    vector<int> v;
    return v;
}

void foo2( vector<int>& parameter ) {
    // Do something
}

void foo3( vector<int> par ) {
    foo2( par );
}
...
foo2(foo1());   // Doesn't work (1)
foo3(foo1());   // Works (2)

有没有办法保持函数foo2不变,因为它是将向量作为参数传递的最佳方式,并且可能使其超载以使(1)工作?或者有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

通过引用传递通常用于'out parameters',用于将值返回给调用者的参数:

void bar(int &i, int &j);

int i, j;
bar(i, j); // sets i and j
// use i and j values here

C ++碰巧禁止将临时绑定绑定到非常量左值。所以这不起作用:

bar(1,2);

但是,需要允许传递临时值而不复制它们,在C ++ 11之前,通过允许临时值绑定到 const 左值引用来填充这个需求。这是一个特殊规则,它仍然可以防止错误地使用临时作为out参数,但允许避免复制。

由于您使用向量作为输入参数而不是输出参数,因此这是避免复制的适当方法:

void foo2(vector<int> const &parameter) {
    // Do something
}

如果“做某事”代码确实最终复制了该向量,那么你最好这样做:

void foo2(vector<int> parameter) {
    // Do something
}

因为这允许编译器在调用foo2的特定情况下为您优化复制,可能会删除副本。