Functions
F.47
Возвращайте `T&` из операторов присваивания
Причина
По соглашению для перегрузки операторов (особенно для конкретных типов) operator=(const T&) должен выполнять присваивание, а затем возвращать (не-const) *this. Это обеспечивает согласованность с типами стандартной библиотеки и следует принципу «делай как int».
Примечание
Исторически существовало руководство возвращать из оператора присваивания const T&. Это было прежде всего для предотвращения кода вида (a = b) = c — такой код достаточно редок, чтобы оправдать нарушение согласованности со стандартными типами.
Пример
class Foo
{
public:
...
Foo& operator=(const Foo& rhs)
{
// Копировать члены.
...
return *this;
}
};
Контроль
Это должно применяться инструментами путём проверки возвращаемого типа (и возвращаемого значения) любого оператора присваивания.