在本讨论中,我们研究与从同一向量推回元素相关的潜在陷阱并探索
潜在危险
考虑以下代码片段:
<code class="cpp">vector<int> v; v.push_back(1); v.push_back(v[0]);</code>
第二个push_back操作可能会重新分配向量,使对第一个元素的引用无效。因此,这种做法一般被认为是不安全的。
安全做法
为了保证此类操作的安全,我们可以使用reserve方法提前分配足够的空间:
<code class="cpp">vector<int> v; v.push_back(1); v.reserve(v.size() + 1); v.push_back(v[0]);</code>
标准一致性
上述行为已在 C 标准(或类似问题)中得到解决:
1) Parameters taken by const reference can be changed during execution of the function Examples: Given std::vector v: v.insert(v.begin(), v[2]); v[2] can be changed by moving elements of vector
然而,这个问题并不被认为是缺陷,因为即使其内容被修改,矢量也有责任确保功能。
以上是当从同一向量推送元素时,依赖原始引用是否安全?的详细内容。更多信息请关注PHP中文网其他相关文章!