Не смущает ли тип параметра функции типа "строка & оператор += (константная строка & str)"? (ссылка на const)

string& operator+= (const string& str);

Когда мы смотрим на прототип функции, мы предполагаем, что строка, переданная в функцию, не будет изменена, верно?

Однако рассмотрим ситуацию:

string str("Example");
str += str;

Строка 'str' была изменена, на самом деле. Разве такой сценарий не считается странным?

Будет ли лучше изменить прототип на?

string& operator+= (string& str);

Я искал много источников и примеров, как это, но это кажется нормальным для большинства людей. Никто не спрашивает об этом, или это может быть тот случай, когда я не нашел его (извините, если это моя проблема, так сложно найти правильные ключевые слова для не носителей языка)

1 ответ

const не говорит, что параметр функции не может быть изменен вообще. Он просто говорит, что его нельзя изменить с помощью этого параметра. Если вы передаете конкретный объект как константный и неконстантный аргумент, то вряд ли вы удивитесь, если он изменится!

С другой стороны, если вы объявляете сам объект const, то вы можете гарантировать (более или менее), что он вообще не изменяется, так как попытка передать его как неконстантный параметр просто потерпит неудачу.

Другие вопросы по тегам