相关疑难解决方法(0)

迭代器失效规则

C++容器的迭代器失效规则是什么?

优选地以摘要列表格式.

(注意:这是Stack Overflow的C++常见问题解答的一个条目.如果你想批评在这种形式下提供常见问题解答的想法,那么发布所有这些的元数据的发布将是这样做的地方.这个问题在C++聊天室中受到监控,其中FAQ的想法一开始就出现了,所以你的答案很可能被那些提出想法的人阅读.)

c++ iterator c++-faq c++11 c++17

509
推荐指数
6
解决办法
11万
查看次数

指针稳定吗?

我想使用实际指针地址(未标记为volatile)来对象进行唯一标识.

这是一件坏事吗?一般来说,系统内存管理会移动对象,因此它的地址是关于指针还是指针稳定?

谢谢

c c++ pointers objective-c

5
推荐指数
1
解决办法
689
查看次数

究竟什么是引用/指针的失效?

我找不到标准中指针/引用失效的任何定义.我问,因为我发现C++ 11禁止字符串的写时复制(COW).据我所知,如果应用了COW,那么在以下命令之后p仍然是一个有效的指针和r一个有效的引用:

std::string s("abc");
std::string s2(s);
char * p = &(s2[0]);
char & r = s2[0];
s2[1] = "B";
Run Code Online (Sandbox Code Playgroud)

只是他们不再指向/引用第一个字符s2,而只是指向第一个字符s.

在C++ 11标准中,据说非常量std::basic_string::operator[]可能不会使字符串元素的指针/引用(以及迭代器)无效.

哪些规则说上面显示的例子实际上会失效p,r如果实施了COW?

c++ pointers reference invalidation language-lawyer

5
推荐指数
1
解决办法
217
查看次数