Возвращаемый тип оператора присваивания
При определении оператора присваивания он неизменно выглядит так:
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 (если это имеет значение).