如果我将“向量引用”分配给“向量”会发生什么

时间:2018-05-18 14:26:18

标签: c++

友 我碰巧错误地写了这段代码:

const std::vector<int> &FunctionReturnReferenceToVector();

vector<int> tmp;
/*do something else*/
tmp = FunctionReturnReferenceToVector();

编译器没有抱怨,我的程序成功结束,结果正确。

请问整个过程到底发生了什么?

我使用了CLion IDE和Clang作为编译器。

4 个答案:

答案 0 :(得分:1)

您的矢量将被复制。 reject将是引用所引用的向量的副本。您可以在自己有趣的示例中看到此行为。像这样:

tmp

输出,你能猜到:

  

我被复制了!

Live example

答案 1 :(得分:1)

tmp将成为返回的向量内容的副本。在这种情况下,FunctionReturnReferenceToVector返回向量的事实并不重要,因为您的代码正在调用复制赋值运算符。

答案 2 :(得分:1)

从你的问题中不清楚是否提到了一个向量。我假设它是从函数返回的:

users duck

在这种情况下,const std::vector<int> &FunctionReturnReferenceToVector(); 只需使用赋值运算符tmp = FunctionReturnReferenceToVector()将向量复制到变量tmp

要使用原始向量进行操作,可以为返回的向量分配const引用:

std::vector<int>::operator=(const std::vector<int>&)

答案 3 :(得分:1)

如果您查看the assignment operator of std::vector<>(以及the copy constructors),您会看到没有按值vector<> >

无论如何都是通过引用传递(然后由复制构造函数复制,这就是为什么它被称为 copy 构造函数)。

参考通常和真实的东西一样好。&#34;。只要向量FunctionReturnReferenceToVector()返回对的引用仍然存在,一切都很好......

确实仍然存在,是吗?如果它只存在于该功能的本地,那你就麻烦了。 ; - )