c ++字符串类是只读的吗?

时间:2013-07-17 07:41:58

标签: c++ string

std::string test("this is a test string");
test[0] = 'b';
像上面的代码一样,部分字符串已被更改,编译器是否会生成新字符串或对旧字符串进行修改?

7 个答案:

答案 0 :(得分:10)

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

查看reference

答案 1 :(得分:4)

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

std::string const test("this is a test string");
test[0] = 'b'; // compile error.

答案 2 :(得分:2)

您将修改现有的string

答案 3 :(得分:2)

根据documentation,operator []将返回此索引处字符的引用。

  

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

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

答案 4 :(得分:1)

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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