我之前看过这个,对我来说没有任何意义:
void generate(std::vector<float> v)
{
float f = generate_next_float();
v.push_back(f);
}
如果将v
作为参考或指针发送,那将是有意义的。但是它是按值发送的,因此被复制到函数中,对吗?因此,一旦函数终止,v
完成后,v
所做的任何事情都将毫无用处。generate_next_float()
超出范围,被删除。
我是对的吗?
也就是说,函数vector
可能会做某事,所以没有用,但是f
在这里的使用似乎毫无意义。 {{1}}不依赖于它,也不会返回任何内容。
答案 0 :(得分:0)
是的,就向量而言,generate()
函数是没有意义的; <{1}}的更改对调用者不可见。
我有一种感觉,v
的作者错过了通过引用作为忽视,而不是作为计划: - )
答案 1 :(得分:0)
好吧,考虑到std容器不进行隐式数据共享,这意味着你将一个新的深拷贝传递给函数,将float推回到新的拷贝中,然后在函数结束后将其丢弃。所以,对我来说,看起来你是对的。
答案 2 :(得分:0)
在这个函数中,std :: vector v不会改变,因为你没有给矢量作为参考。它只是在函数中复制而复制更改但不是原始复制。您可以使用:
void generate(std::vector<float> &v) //input given as reference
{
float f = generate_next_float();
v.push_back(f);
}