Возвращаемый тип оператора присваивания

При определении оператора присваивания он неизменно выглядит так:

class X {...};

X& X::operator=(...whatever...);

То есть имеет тип возвратассылка на Х ", Здесь параметры (...whatever...) может быть ,X&const X&, простоX при использованииидиома копирования и обменаили любой другой тип.

Кажется странным чтокаждый рекомендует возвращать неконстантную ссылку наXнезависимо от параметров. Это явно позволяет выражения как(a = b).clear(), который должен быть хорошим.

У меня другое мнение, и я хочу запретить такие выражения, как,(x=y).clear(x=y)=z, и дажеx=y=z в моем коде. Моя идея состоит в том, что эти выражения делают слишком сложные вещи в одной строке кода. Поэтому я решил вернуть мои операторы присваивания:void

void X::operator=(X) {...}
void X::operator=(int) {...}

Какие негативные последствия это имеет? (за исключением того, что выглядит иначе, чем обычно)

Можно ли использовать мой класс X со стандартными контейнерами (например,std::vector)?

Я использую C ++ 03 (если это имеет значение).

Ответы на вопрос(1)

Ваш ответ на вопрос