这个函数对向量的使用是无用的吗?
Is this function's use of vector useless?
我之前看到过这个,它对我来说没有任何意义:
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);
}
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 为什么 GCC 在使用继承的构造函数时警告我无用的强制转换
- C++无用友函数声明
- 这个函数对向量的使用是无用的吗?
- 代码清理-删除c++中无用的文件,包括,全局变量和函数