通过引用传递C++向量,然后执行 push_back()
Pass C++ vector by reference and then do push_back()
考虑这个函数来说明这种情况:
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
而发生的。
但是,您不会显示任何此类指针或对缓冲区的引用。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- C++,系统无法执行指定的程序
- 使用C++中的模板和运算符重载执行矩阵运算
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 执行函数时导致崩溃的变量
- 无论条件是否为true,if总是在c++中执行
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 在C++中对T*类型执行std::move的意外行为
- 使用QProcess执行命令,并将结果存储在QStringList中
- 如何在没有信号的情况下从C++执行QML插槽
- 如何确认我的constexpr表达式实际上已经在编译时执行
- C++17中的并行执行策略
- QML按钮点击功能执行顺序
- 程序在执行程序的其余部分之前退出
- 为什么catch中的代码没有被执行
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 将执行、作业和WinAPI相乘
- 对字符数组中的元素执行逐位操作
- 为什么g++在未执行的代码处标记强制转换错误
- 如何使用原子指针执行双缓冲