В C++ строковые литералы "Hello" являются постоянными и неизменяемыми. Я хотел создать собственный класс строк, строки которого не являются константными символами, чтобы их можно было изменить.
Вот фрагмент кода, который может иллюстрировать то, что я пытаюсь сделать:
#include <iostream>
class String {
public:
char * p_start;
String(char * strSourc) // Constructor
{
p_start = strSourc;
}
};
int main()
{
String myString("Hello");
// Create object myString, send "Hello" string literal as argument
std::cout << myString.p_start << std::endl;
// Prints "Hello"
*myString.p_start = 'Y';
// Attempt to change value at first byte of myString.p_start
std::cout << myString.p_start << std::endl;
// Prints "Hello" (no change)
myString.p_start = "Yellow";
// Assigning a string literal to p_start pointer
std::cout << myString.p_start << std::endl;
// Prints Yellow, change works. I thought myString "Hello" was const chars, immutable
return 0;
}
Итак, я в замешательстве. Я искал везде, и там говорится, что строковые литералы, такие как «Hello», неизменяемы, каждый из их байтов char неизменен. Хотя мне удалось присвоить Yellow указателю p_start, изменив первую букву. Хотя изменение одной буквы H на Y путем разыменования указателя H ничего не дало.
Любые идеи помогут мне, спасибо.
p_start
. Вы можете сделать его копию в ctor, затем вы можете изменить символы, которыми управляет класс. - person songyuanyao   schedule 03.10.2015