gpt4 book ai didi

c++ - 在向 vector 添加更多元素之前引用 vector 元素

转载 作者:搜寻专家 更新时间:2023-10-31 00:29:49 25 4
gpt4 key购买 nike

考虑这段代码:

int main()
{

std::vector<std::string> v;

v.push_back("hello");
v.push_back("stack");

std::string &s = v[0];

v.push_back("overflow");

std::cout << s << std::endl;

return 0;
}

运行后(使用 g++ (Ubuntu 4.8.4-2ubuntu1~14.04.1) 4.8.4)这只会打印一个空行,hello 不会打印。如果我注释掉 v.push_back("stack");,则会出现段错误。

现在我明白为什么会这样了。向 vector 添加更多元素会触发引擎盖下的增长操作,之后我的旧引用将变得无效。这不是我的问题。

我的问题是这种行为——在采用引用/指针后修改 vector 或其他 STL 容器——是否被定义为 C++ 标准中的未定义行为?如果是,在哪里?如果不是,那么标准对这种情况有何规定?

最佳答案

C++14 [vector.capacity]/6:

Reallocation invalidates all the references, pointers, and iterators referring to the elements in the sequence.

[vector.modifiers]/6 涵盖了 push_back 可能导致重新分配,迭代器只有在没有重新分配时才不会失效。

我实际上找不到任何文本来定义引用失效的含义,但它清楚地暗示在失效后使用引用的值将是未定义的行为。

关于c++ - 在向 vector 添加更多元素之前引用 vector 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39361878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com