我知道当你传递一个数组作为参数时,你基本上传递了数组在索引 0 处的地址。然后,硬件知道 int 通常是 4 个字节,因此它可以轻松访问其他元素。 我的问题是关于 vector 的。 如果我有一个函数
void bla(std::vector<int> &arr)
{
}
然后它应该传递一个对 vector 的引用,但它会像数组一样发生吗? vector 是使用数组实现的,所以我的假设是当我传递一个引用时,它只是传递第一个元素的地址。对不对?
此外,如果我只是作为 vector 传递,会发生什么情况?它会在堆栈上创建一个拷贝吗? 谢谢
最佳答案
std::vector
与原始 C 风格数组非常不同,因此如果您通过引用传递 std::vector
没有人能说 std::vector
中第一项的地址就是传递给函数的地址。
在 std::vector
中有比“原始 C 风格数组”更多的逻辑。
如果您想要 vector 中第一项的地址,您可以使用&v[0]
或v.data()
获取它。
如果按值传递 vector ,您将获得原始 vector 的拷贝。并且您在函数中对该拷贝所做的所有修改都不会反射(reflect)到原始文件中。
关于c++ - 将对 vector 的引用作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40048557/