Есть ли веская причина не возвращать * из оператора присваивания копий?

Пусть foo - структура или класс с оператором присваивания копии:

struct foo {
    foo &operator=(const foo &);  // or with some other return type?
};

Есть ли разумная причина возвращать из operator=() ничего, кроме *this? Использование его для чего-то, не связанного с назначением, не квалифицируется как разумное.

Ответ 1

Пример из стандарта std::atomic. Он возвращает назначенное значение. Если он вернет ссылку, то чтение через нее может привести к другому результату.

Ответ 2

Если вы хотите предотвратить цепочку привязки.

Иногда приятно предупреждать такие выражения:

x = y = z = a = b = c = d = foo{15};

Итак, вы делаете оператор присваивания return void.

struct foo {
    void operator=(const foo &);
};

Для некоторых типов цепочка не имеет смысла. Но вы должны смотреть на то, что на случай случае.