Если вы удалите const
из параметра конструктора и из элемента данных, код не будет скомпилирован, поскольку аргумент str
, передаваемый конструктору, объявлен как const char *
. Это абсолютно не имеет ничего общего с "Hello World"
литералом. Вы можете инициализировать str
с 0
вместо "Hello World"
, и код все равно не сможет скомпилироваться.
Строковый литерал "Hello World"
имеет тип const char[12]
. Однако языковые правила позволяют преобразовывать строковые литералы в тип char *
, что означает, что если вы инициализировали свой объект как
mystring s("Hello World");
код прекрасно скомпилируется даже после того, как вы удалили const
из параметра конструктора и члена данных. Но как только вы добавляете эту промежуточную переменную str
в рисунок, "Hello World"
становится неактуальным. Больше не имеет значения, что такое "Hello World"
. Только то, что str
имеет значение.