我的理解是,std::string
的写时复制不再存在于C ++ 11中。
以下代码将证明这并非完全正确。
#include <string>
#include <iostream>
void Modify(std::string& s)
{
if (!s.empty())
{
*const_cast<char*>(s.data()) = 'W';
}
}
int main()
{
std::string a = "Hello World";
std::string b = a; // Does not do a deep copy.
Modify(a);
std::cout << (a == b ? "Failed\n" : "Succeeded\n");
return 0;
}
我不确定我在这里打破了什么规则。
无论如何抛弃const,为什么不能完成深层复制呢?
我知道可以用std::string b = a.c_str();
强迫它,但这不是重点。
g ++(Ubuntu 4.8.2-19ubuntu1)4.8.2