【发布时间】:2012-10-26 21:20:54
【问题描述】:
我有这些功能:
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) 工作?或者有更好的方法吗?
【问题讨论】:
-
您不能将非常量引用绑定到临时引用。无论如何,如果函数调用的临时返回值刚刚被销毁,那么修改它的意义何在?
-
@Sval 从不按值传递向量。这是非常不理想的。
-
@satuon,除非你无论如何都需要复制它。
-
如果不需要修改vector的内容,
foo2应该把它当成const vector<int>&。那么临时通过就没有问题了。 -
@Svalorzen:看看这个cpp-next.com/archive/2009/08/want-speed-pass-by-value,那是没有move-semantics的C++03。