我在标准中找不到指针/引用无效化的定义。我提出这个问题是因为我刚刚发现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';
(一个字符而不是字符串字面量)吗?你现在的代码无法编译。 - Kevin