C++ 通过C&x2B+;引用向量,然后执行push_back()

C++ 通过C&x2B+;引用向量,然后执行push_back(),c++,pass-by-reference,stdvector,C++,Pass By Reference,Stdvector,考虑此函数以说明该情况: 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, fo

考虑此函数以说明该情况:

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);
}
void appendAndPrint(标准::向量&v,整数)
{
v、 推回(数字);//让重新分配

std::cout但不是容器本身。它是普通代码。

但不是容器本身。它是普通代码。

对向量的引用仍然有效

如果有指向向量缓冲区部分的任何指针或引用(包括迭代器),则这些指针或引用会因重新分配而无效,这可能是由于
推回
而导致的


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

对向量的引用仍然有效

如果有指向向量缓冲区部分的任何指针或引用(包括迭代器),则这些指针或引用会因重新分配而无效,这可能是由于
推回
而导致的


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

您对
push\u back
的调用将复制
int
的值,因此当人们说重新分配“使引用无效”时,您可以在体内再次调用
push\u
,这意味着它会使对元素的引用无效,而不是容器本身。向后推向量中的元素会使对向量中元素的引用无效,但不会使对向量本身的引用无效。对
push\u back
的调用将复制
int
的值,因此再次调用
push\u
是安全的在你体内,当人们说重新分配“使引用无效”,这意味着它会使对元素的引用无效,而不是容器本身。推回向量中的元素会使对向量中元素的引用无效,但不会使对向量本身的引用无效。这在标准中提到过吗?@trigger它必须起作用,因为标准中没有任何规定它不起作用。我提到过吗在标准中?@trigger它必须起作用,因为标准中没有说它不起作用。
std::vector<int> vec;
appendAndPrint(vec, 5);