0

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

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

如果v作为引用或指针发送,那将是有意义的。但它是按值发送的,因此被复制到函数中,对吗?因此,一旦函数终止,所做的任何事情都将v立即无用,这v超出了范围,被删除了。

我对吗?

也就是说,函数generate_next_float()可能会做一些事情,所以不是没用,但是vector这里的使用似乎毫无意义。f不依赖它,什么也不返回。

4

3 回答 3

0

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

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

于 2013-04-05T00:37:22.923 回答
0

好吧,考虑到 std 容器不进行隐式数据共享,这意味着您将向函数传递一个新的深层副本,将浮点数 push_back 到该新副本中,然后在函数结束后将其丢弃。所以,在我看来,你是对的。

于 2013-04-05T00:52:24.027 回答
0

在这个函数中 std::vector v 不会改变,因为你没有给出向量作为参考。它只是在函数内复制,复制被更改,但不是原始的。您可以使用:

void generate(std::vector<float> &v) //input given as reference
{
  float f = generate_next_float();
  v.push_back(f);
}
于 2013-04-05T05:23:53.997 回答