std::string test("this is a test string");
test[0] = 'b';
和上面的代码一样,部分字符串已经改变了,编译器会生成一个新字符串还是修改旧字符串?
test[0]
将返回对第一个字符的非常量(因为字符串对象是非常量)引用,该字符将成功替换为b
字符。
看参考。
不,你正在修改旧的。如果你想要一个只读的字符串对象,你需要const
std::string const test("this is a test string");
test[0] = 'b'; // compile error.
您将修改现有的string
.
根据文档, operator[] 将在该索引处返回对该字符的引用。
如果字符串对象是 const 限定的,则该函数返回一个 const char&。否则,它返回一个 char&。
如果您的字符串是常量,您将无法修改它,否则您将能够更改原始字符串
将test
std::string
变为“bhis is a test string”,因为您可以更改它。用于构造字符串的字符串文字"this is a test string"
不会改变。
的构造函数string
将复制字符数组。第二行将修改该副本。
C++std
字符串是mutable
并且它们是可变的。在这种情况下,字符串将进行修改,而不是实例化一个新的字符串对象。