Аргумент, что если компилятор может предоставить конструктор копирования по умолчанию, он должен быть в состоянии предоставить аналогичное значение по умолчанию operator==()
, имеет определенный смысл. Я думаю, что причина решения не предоставлять сгенерированный компилятором по умолчанию для этого оператора может быть угадана тем, что сказал Страуструп о конструкторе копирования по умолчанию в «Проектировании и развитии C ++» (Раздел 11.4.1 - Управление копированием) :
Лично я считаю это неудачным
что операции копирования определяются
по умолчанию, и я запрещаю копирование
объекты многих из моих классов.
Тем не менее, C ++ унаследовал его по умолчанию
присваивание и копирование конструкторов из
С, и они часто используются.
Таким образом, вместо «почему в C ++ нет значения по умолчанию operator==()
?», Вопрос должен был звучать так: «Почему в C ++ есть конструктор присваивания и копирования по умолчанию?», С ответом, что эти элементы неохотно включались Stroustrup для обратной совместимости с C (вероятно, причина большинства бородавок C ++, но также, вероятно, основная причина популярности C ++).
Для моих собственных целей в моей IDE фрагмент, который я использую для новых классов, содержит объявления для частного оператора присваивания и конструктора копирования, так что когда я генерирую новый класс, у меня нет операций присваивания и копирования по умолчанию - мне нужно явно удалите объявление этих операций из раздела private:
, если я хочу, чтобы компилятор мог сгенерировать их для меня.