Разбираем, зачем своему типу в C++ определять
operator==, какие свойства ожидаются от равенства (рефлексивность, симметричность, транзитивность и «заменяемость»), чем отличается равенство по идентичности (
id) от равенства по значению (все поля), когда уместно
operator==
=
default, и как это влияет на стандартные алгоритмы вроде
std::find. Отдельно обсуждаем, почему «почти равенство» для
double лучше выносить в функцию вроде
almostEqual, а не прятать магию в
==.