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);