我有一个简单的功能:
vector<float>& myFunction() {
//> Do something and return a vector<float> (don't worry about scoping now )
}
现在其他地方的区别是:
vector<float>& myNewVar = myfunction();
^
与
vector<float> myNewVar = myfunction(); //> Without reference
第二个例子不等同于这种情况:
void myFunction(vector<float>& outVector) {
//> some code
}
vector<float> myVect;
myFunction(myVect);
答案 0 :(得分:4)
在此版本中
vector<float>& myNewVar = myfunction();
myNewVar
是引用,无论myfunction()
返回引用的内容。
在这一个
vector<float> myNewVar = myfunction();
myNewVar
是副本,无论myfunction()
返回引用。它将引用作为std::vector<float>
的复制构造函数的输入。
如果没有功能,可能会更好地说明这一点:
int i = 42;
// I want a referennce, so I create one
int& j = i;
// I want a copy, so I make one, even though j is a reference.
// j is just an alias for i, so k really is a copy of i.
int k = j;
答案 1 :(得分:1)
在第二种情况下,调用copy-ctor,在第一种情况下不是:
class MyClass
{
public:
MyClass() { }
MyClass(const MyClass & right)
{
printf("Copy ctor\n");
}
};
MyClass & fn()
{
// Only for the sake of example
// Please don't complain ;)
return *(new MyClass());
}
int main(int argc, char * argv)
{
printf("First case\n");
MyClass & a = fn();
printf("Second case\n");
MyClass b = fn();
}
编辑:回答您的问题:
第二个例子不是等同于这种情况:
void myFunction(vector<float>& outVector) {
//> some code
}
vector<float> myVect;
myFunction(myVect);
这取决于。如果不在myFunction中分配outVector,则不会调用copy-ctor。差异很小,但确实存在。