-1

我很想知道何时复制函数的参数。

#include <vector>

void foo (std::vector<float> a)
{
   std::vector<float> y = std::move(a);
   //do something with vector y
}

int main()
{
   std::vector<float> x {1.0f, 2.0f, 3.0f};
   std::cout << x.at(0) << " " << x.at(1) << " " << x.at(2) << std::endl; //1.0 2.0 3.0
   foo(x);
   std::cout << x.at(0) << " " << x.at(1) << " " << x.at(2) << std::endl; //print nothing
}

该函数是否从一开始就复制其参数?如果不是,我们如何知道参数何时被复制?从上面的代码中,我假设参数没有被复制,因为 std::move 仍然影响变量 x。

4

1 回答 1

3

该函数是否从一开始就复制其参数?

在输入的正文之前,该a参数将在 内的调用站点复制。main()foo()

从上面的代码中,我假设参数没有被复制,因为 std::move 仍然影响 variable x

a参数是按值传递的,所以a复制. x然后foo() move就是拷贝进去了yx不受影响,这与您的主张相反。

如果a参数是通过引用传递的,或者你move'd xinto a,那么x就会受到影响。

于 2020-07-30T20:25:56.440 回答