std::string test("this is a test string");
test[0] = 'b';
像上面的代碼,該字符串的一部分已經改變,將編譯器生成一個新的字符串或做舊的修改?C++字符串類是隻讀的嗎?
std::string test("this is a test string");
test[0] = 'b';
像上面的代碼,該字符串的一部分已經改變,將編譯器生成一個新的字符串或做舊的修改?C++字符串類是隻讀的嗎?
test[0]
將返回一個非const(因爲字符串對象是非const)對第一個字符的引用,該字符將被成功替換爲b
字符。
看的reference。
您將修改現有string
。
按照documentation操作[]將這個索引處返回上的字符的參考。
如果字符串對象是const限定的,則函數返回一個常量字符&。否則,它將返回一個字符&。
如果字符串是不變的,你就不能修改它,否則,你將能夠改變原始字符串
不,你正在修改舊的。如果你想有一個字符串對象只讀的,你需要常量
std::string const test("this is a test string");
test[0] = 'b'; // compile error.
的string
構造函數將字符數組複製。第二行將修改該副本。
其實沒有構造函數可以複製的字符串;它會將*字符數組*複製到新創建的字符串中。 – celtschk
我認爲一個'char'數組是C風格的字符串。但是,我會改變文字。 –
test
std::string
將成爲「bhis是測試字符串」,因爲您可以更改它。 用於構造字符串的字符串文字"this is a test string"
不會更改。
C++ std
字符串是mutable
,他們是可以改變的。在這種情況下,字符串將進行修改而不是實例化新的字符串對象。
它值得一提的是,聲明對象作爲'const'不使其真正只讀的,你說出它,因爲常量性可能被拋棄。 – Kolyunya
@Kolyunya,但它會是未定義的行爲來執行任何非常量的操作。 – juanchopanza
@ juanchopanza謝謝你的信息,我不知道! '7.1.5.1/4:除了任何聲明mutable的類成員(7.1.1)都可以被修改外,任何在其生命週期(3.8)期間修改const對象的嘗試都會導致未定義的行爲。' – Kolyunya