Я пытаюсь понять программу, которая включает следующее определение функции f
void f(String S, const String& r)
{
}
Здесь String в аргументе обозначает класс.Меня смущает различие между определениями этих двух аргументов: «String S» и «const String & r».S должен представлять объект класса String, тогда как насчет r?
Более подробно, f определяется как
void f(String S, const String& r)
{
int c1 = S[1]; // c1=s.operator[](1).operator char( )
s[1] ='c'; // s.operator[](1).operator=('c')
int c2 = r[1]; // c2 = r.operator[](1)
r[1] = 'd'; // error: assignment to char, r.operator[](1) = 'd'
}
Этот фрагмент кода должен показать, как перегрузка оператора, ноэти комментарии мне не сильно помогают.Например, почему r [1] = 'd' не правильно?Спасибо за помощь в понимании этого.