3
std::string test("this is a test string");
test[0] = 'b';

和上面的代码一样,部分字符串已经改变了,编译器会生成一个新字符串还是修改旧字符串?

4

7 回答 7

10

test[0]将返回对第一个字符的非常量(因为字符串对象是非常量)引用,该字符将成功替换为b字符。

参考

于 2013-07-17T07:45:13.227 回答
4

不,你正在修改旧的。如果你想要一个只读的字符串对象,你需要const

std::string const test("this is a test string");
test[0] = 'b'; // compile error.
于 2013-07-17T07:46:11.403 回答
2

您将修改现有的string.

于 2013-07-17T07:44:02.707 回答
2

根据文档, operator[] 将在该索引处返回对该字符的引用。

如果字符串对象是 const 限定的,则该函数返回一个 const char&。否则,它返回一个 char&。

如果您的字符串是常量,您将无法修改它,否则您将能够更改原始字符串

于 2013-07-17T07:45:57.900 回答
1

test std::string变为“bhis is a test string”,因为您可以更改它。用于构造字符串的字符串文字"this is a test string"不会改变。

于 2013-07-17T07:52:12.610 回答
0

的构造函数string将复制字符数组。第二行将修改该副本。

于 2013-07-17T07:46:55.607 回答
0

C++std字符串是mutable并且它们是可变的。在这种情况下,字符串将进行修改,而不是实例化一个新的字符串对象。

于 2013-07-17T07:57:18.843 回答