【发布时间】:2019-01-15 19:51:46
【问题描述】:
我在标准中找不到指针/引用无效的任何定义。我问是因为我刚刚发现 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";
只是他们不再指向/引用s2 的第一个字符,而只是指向s 的第一个字符。
在 C++11 标准中,据说非常量 std::basic_string::operator[] 不会使指向字符串元素的指针/引用(以及迭代器)无效。
如果实施了 COW,哪些规则表明上述示例实际上会使 p 和 r 无效?
【问题讨论】:
-
应该是
s2[1] = 'B';(char,而不是字符串文字)?你那里的东西不应该编译。 -
标准只说“可能失效”。
标签: c++ pointers reference language-lawyer invalidation