这个函数对向量的使用是无用的吗?

Is this function's use of vector useless?

本文关键字:无用 函数 向量      更新时间:2023-10-16

我之前看到过这个,它对我来说没有任何意义:

void generate(std::vector<float> v)
{
 float f = generate_next_float();
 v.push_back(f);
}

如果v作为引用或指针发送,这是有意义的。但是它是按值发送的,因此被复制到函数中,对吧?所以对v做的任何事情都是无用的,一旦函数终止,v就在作用域之外,被删除了。

我说的对吗?

也就是说,函数generate_next_float()可能会做一些事情,所以不是无用的,但是在这里使用vector似乎毫无意义。f不依赖于它,并且不返回任何内容。

是的,就矢量而言,generate()函数毫无意义;对v的更改对调用者是不可见的。

我有一种感觉,generate()的作者错过了通过引用作为忽视,而不是作为一个计划:-)

嗯,考虑到std容器不做隐式数据共享,这意味着您将传递一个新的深度副本到函数中,将float推回到新副本中,然后在函数结束后丢弃该副本。所以,在我看来,你是正确的。

在这个函数中std::vector v不会因为没有给出vector作为引用而改变。它只是在函数内复制,复制改变了,但不是原始的。你可以使用:

void generate(std::vector<float> &v) //input given as reference
{
  float f = generate_next_float();
  v.push_back(f);
}