Правило 10: Операторы присваивания должны возвращать ссылку на *this
Правило 10: Операторы присваивания должны возвращать ссылку на *this
Одно из интересных свойств присваивания состоит в том, что такие операции можно выполнять последовательно:
int x,y,z;
x = y = z = 15; // цепочка присваиваний
Также интересно, что оператор присваивания правоассоциативен, поэтому приведенный выше пример присваивания интерпретируется следующим образом:
x = (y = (z = 15));
Здесь переменной z присваивается значение 15, затем результат присваивания (новое значение z) присваивается переменной y, после чего результат (новое значение y) присваивается переменной x.
Достигается это за счет того, что оператор присваивания возвращает ссылку на свой левый аргумент, и этому соглашению вы должны следовать при реализации операторов присваивания в своих классах:
class Widget {
public:
...
Widget& operator=(const Widget& rhs) // возвращаемый тип – ссылка
{ // на текущий класс
...
return *this; // вернуть объект из левой части
} // выражения
...
};
Это соглашение касается всех операторов присваивания, а не только стандартной формы, показанной выше. Следовательно:
class Widget {
public:
...
Widget& operator+=(const Widget& rhs) // соглашение распространяется на
{ // +=, -=, *=, и т. д.
...
return *this;
}
Widget& operator=(int rhs) // это относится даже
{ // к параметрам разных типов
...
return *this;
}
...
};
Это всего лишь соглашение. Если программа его не придерживается, она тем не менее скомпилируется. Однако ему следуют все встроенные типы, как и все типы (см. правило 54) стандартной библиотеки (то есть string, vector, complex, tr1::shared_ptr и т. д.). Если у вас нет веской причины нарушать соглашение, не делайте этого.
Что следует помнить
• Пишите операторы присваивания так, чтобы они возвращали ссылку на *this.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Операторы присваивания
Операторы присваивания В JScript, как и в языке С, для изменения содержимого переменных можно комбинировать оператор присваивания "=" с другими операторами (табл. П1.6).Таблица П1.6. Комбинации оператора присваивания и других операторов Оператор Описание = Простое
Операторы отношения и логические операторы
Операторы отношения и логические операторы Операторы отношения используются для сравнения значений двух переменных. Эти операторы, описанные в табл. П2.11, могут возвращать только логические значения true или false.Таблица П2.11. Операторы отношения Оператор Условие, при
Операторы присваивания
Операторы присваивания Оператор присваивания = нам уже знаком. Его еще называют оператором простого присваивания, поскольку он просто присваивает переменной новое значение:a = 2;b = c = 3;Второе выражение в приведенном примере выполняет присвоение значения 3 сразу двум
Как создать magnet-ссылку
Как создать magnet-ссылку Magnet-ссылка создается очень просто. Здесь могут быть два варианта: вы создаете ссылку на раздаваемые вами файлы или вы создаете ссылку на файлы, которые желаете закачать к себе на компьютер. Технология создания ссылки одна. Вам следует открыть список
Операторы присваивания
Операторы присваивания Оператор присваивания = нам уже знаком. Его еще называют оператором простого присваивания, поскольку он просто присваивает переменной новое значение:a = 2;b = c = 3;Второе выражение в приведенном примере выполняет присвоение значения 3 сразу двум
Как, разместив одну ссылку на сайт, получить еще сто
Как, разместив одну ссылку на сайт, получить еще сто Всем известно: чем больше тематических сайтов ссылается на ваш сайт, тем выше фактор доверия, а соответственно и позиции в поисковых системах.Покупка качественных ссылок с тематических площадок, безусловно, даст
Оператор присваивания
Оператор присваивания Оператор присваивания – :=. Для удобства понимания записи алгоритмов его можно читать, например, так:X := … – пусть X
Оператор присваивания
Оператор присваивания x = … – пусть x будет…
R.5.17 Операции присваивания
R.5.17 Операции присваивания Существует несколько операций присваивания, все они выполняются справа налево. Для всех них требуется, чтобы левым операндом был изменяемый адрес. Тип выражения присваивания совпадает с типом левого операнда. Результат операции присваивание -
R.13.4.3 Присваивания
R.13.4.3 Присваивания Функция присваивания operator=() должна быть нестатической функцией-членом. Она не наследуется (§R.12.8). Более того, если пользователь не определил для класса X функцию operator=, то используется стандартная функция operator=, которая определяется как присваивание по
Операторы присваивания
Операторы присваивания Операторы присваивания приписывают переменным или свойствам объектов конкретные значения. Такие операторы всегда состоят из трех частей: имени переменной, или свойства, знака равенства и выражения, задающего нужное значение.Термин выражение я
Глава 2 Конструкторы, деструкторы и операторы присваивания
Глава 2 Конструкторы, деструкторы и операторы присваивания Почти во всех ваших классах будут определены один или несколько конструкторов, деструктор и оператор присваивания. Это функции, которые отвечают за операции создания и инициализации объекта, его уничтожения, а
Правило 21: Не пытайтесь вернуть ссылку, когда должны вернуть объект
Правило 21: Не пытайтесь вернуть ссылку, когда должны вернуть объект Как только программисты осознают проблемы эффективности, связанные с передачей объектов по значению (см. правило 20), они, подобно крестоносцам, преисполняются решимости искоренить зло – передачу по