2013-07-17 2 views

ответ

10

test[0] вернет неконстантный (поскольку строковый объект не является константой) ссылка на первый символ, который будет успешно заменен на символ b.

Посмотрите reference.

2

Вы будете изменять существующие string.

2

В соответствии с documentation оператор [] вернет ссылку на символ по этому индексу.

Если строковый объект имеет значение const, функция возвращает const char &. В противном случае он возвращает char &.

Если строка является константой, вы не сможете изменить его, иначе вы будете иметь возможность изменить исходную строку

4

Нет, вы изменяете старый. Если вы хотите строковый объект только для чтения, вам нужно сопзИте

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

Следует отметить, что объявление объекта как 'const' не делает его по-настоящему доступным для чтения, поскольку вы указываете его, поскольку константа может быть отброшена. – Kolyunya

+2

@ Kolyunya, но это было бы неопределенным поведением для выполнения любых неконстантных операций над ним. – juanchopanza

+0

@juanchopanza спасибо за информацию, я этого не знал! '7.1.5.1/4: За исключением того, что любой член класса, объявленный mutable (7.1.1), может быть изменен, любая попытка изменить объект const в течение его жизненного цикла (3.8) приводит к неопределенному поведению.' – Kolyunya

0

Конструктор string будет копировать массив символов. Вторая строка изменит эту копию.

+0

На самом деле нет строки, которую может копировать конструктор; он скопирует * character array * во вновь созданную строку. – celtschk

+0

Я рассматриваю массив 'char' как строку C-стиля. Но, я все равно изменю текст. –

1

teststd::string станет «bhis - тестовая строка», так как вы можете его изменить. Строковый литерал "this is a test string", используемый для построения строки, не изменится.

0

C++ std строки mutable, и они являются изменяемыми. В этом случае строка будет подвергаться модификации вместо создания экземпляра нового строкового объекта.

Смежные вопросы