通过引用传递C++向量,然后执行 push_back()

Pass C++ vector by reference and then do push_back()

本文关键字:push 执行 back 然后 引用 向量 C++      更新时间:2023-10-16

考虑这个函数来说明这种情况:

void appendAndPrint(std::vector<int> &v, int number)
{
    v.push_back(number);    // let there has been a reallocation
    std::cout << v.back();  // does the local reference v become invalid here?
    // is it safe, for example, to call here push_back() with v once again, like
    // v.push_back(number);
}

然后用一些向量调用它:

std::vector<int> vec;
appendAndPrint(vec, 5);

在第一次向量重新分配后,传递给函数的引用是否变得无效?

编辑:

这种结构经常使用,但是C++标准中在哪里引用了这种安全性?

所提到的只是对容器元素的引用/指针/迭代器的生存期。

迭代器和对元素的引用无效,但容器本身无效。这是普通代码。

对向量的引用仍然有效。

如果您有指向矢量缓冲区部分的任何指针或引用(包括迭代器),则这些指针或引用将通过重新分配失效,这可能是由于push_back而发生的。

但是,您不会显示任何此类指针或对缓冲区的引用。