2013-04-05 48 views
0

我看到这个早些时候,它没有任何意义,我:这个函数对矢量的使用是无用的吗?

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

如果v作为参考或指针,这将是有意义发送。但相反,它是通过价值发送的,因此被复制到该函数中,对吗?因此,对v所做的任何操作都会在函数终止时立即失效,v超出范围并被删除。

我对不对?

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

+1

取决于什么副作用'generate_next_float()'了。 – 2013-04-05 00:34:29

+0

对,我编辑的问题和标题,以指定我指的是矢量 – johnbakers 2013-04-05 00:36:55

+0

我想知道你在哪里看到这个?它看起来像多出来的代码;有人忘记包含'&'。 – 2013-04-05 00:37:01

回答

0

是的,就矢量而言,generate()函数是毫无意义的;对v的更改将不会被调用者看到。

我有一种感觉的generate()笔者错过了按引用传递的俯瞰,还不如:-)

0

好一个计划,考虑性病容器不做隐式数据共享,这意味着你会通过一个新的深入拷贝到函数中,push_back浮动到新的拷贝中,然后在函数结束后被抛弃。所以,对我来说,看起来你是对的。

0

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

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