Оператор присваивания строки C++

Я просматриваю некоторый код для оператора присваивания строкового класса, и есть некоторые понятия, которые я не понимаю.

1) Аргумент является константой, но значение в конечном итоге меняется, я думал, что константы не могут быть изменены?

2) Вы передаете адрес строкового аргумента, а затем в операторе if вы снова получаете доступ к адресу, не могли бы вы пропустить Ampersand, так как к адресу уже следует обращаться, просто используя "right"?

String& String::operator=(const String& right) //why is const passed is a new value gets assigned?
  {
     if (this != &right) // Cant this be if(this != right)
        {
           delete[] buffer; // Get rid of old buffer len = right.length();
           buffer = new char[len + 1];
           for (int i = 0; i < len; i++)
             buffer[i] = right[i];
            buffer[len] = '\0';
        }  
     return *this;
  }

4 ответа

Пожалуйста, оставьте отдельный вопрос в будущем.

В (1) вы путаете две стороны задания. Правая сторона постоянна. a=b определенно не меняется б.

(2) Вы передаете выражение, а не адрес. right является ссылкой на это выражение. this с другой стороны это указатель. Проверьте свою книгу, это базовый C++.

При вызове оператора присваивания для двух строк, A и B, например, A=B, строка B передается как константная ссылка. Строка A - это то, что изменяется.

В строке this!= & Right мы сравниваем это (указатель на строку на LHS знака =) с &right (адрес строки на RHS знака равенства). Не имеет смысла сравнивать указатель со строкой, как если бы мы использовали это! = Right.

1) Вы передаете константную ссылку, это означает, что вы не можете изменить right аргумент, но вы можете изменить содержимое this,

2) this это указатель right это ссылка. Они не одинаковы, и поэтому вы не можете сравнивать напрямую. Вы можете получить адрес ссылки, используя &right,

Строка передается как константная ссылка, а не как константный указатель. Следовательно, проверка должна быть this != &right чтобы получить сравнение указатель-указатель.

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