LINUX.ORG.RU

Почему оператор != не генерируется автоматически, если определен == ?

 , ,


1

5

Собственно сабж. Вообще логично было бы определять логически противоположные операторы обоюдной негацией (отрицанием?):

struct Comparable {
  // имеем определенный оператор ==
  template <typename T>
  bool operator ==(const T &rhs) const { /* ... */ }

  // тогда было бы логично implicit определить
  template <typename T>
  bool operator !=(T&& rhs) const { 
    return !this->operator ==(std::forward<T>(rhs)); 
  }

  // ну или explicit
  template <typename T>
  bool operator !=(const T&) = default;
};

Я тут сварганил пример (естественно без шаблонов, чтоб меньше потенциальных ошибок): https://wandbox.org/permlink/a4k0hlNVI4UgyDrc

И, как можно видеть, оператор != не определяется автоматически. Вопрос: почему, ЧЯДНТ?

P.S. Нашел на stackoverflow предложение которое не вошло в С++17) но решило бы волпрос: Explicitly defaulted comparison operators

Ответ на: комментарий от t184256

И да, ну чтоб ты знал : так работает fpu на всех более менее совместимых со стандартом процах. То есть команда сравнения fucom/fucomp/fucompp покажет тебе задницу вместо выставления флага равенства.

ckotinko ☆☆☆
()
Ответ на: комментарий от ckotinko

И что я должен вынести из твоего коммента? Это как-то отменяет то, что для произвольного объекта A из !(A==B) не следует A!=B?

t184256 ★★★★★
()
Ответ на: комментарий от utf8nowhere

Этот чудак, который уже раза три мне отвечает безо всякой связи с тем, что пишу я? Он максимум в пятерку адекватнее твоего юзернейма.

t184256 ★★★★★
()
Ответ на: комментарий от Deleted

Боюсь, это родовая травма крестов. Трупу птицы показалось, что удобной и надёжной заменой printf была бы перегрузка операции битового сдвига влево и с тех пор долгое время было принято считать, что так делать нормально.

khrundel ★★★★
()
Ответ на: комментарий от ckotinko

С чего это мне это не нравится? Ты как вообще, русскую речь понимаешь или просто три слова читаешь и пишешь, что в голову взбредет?

t184256 ★★★★★
()
Ответ на: комментарий от khrundel

Угу. Когда открываешь код на Python, а там через перегруженный побитовый сдвиг сохраняются данные в файл, диагноз поставить несложно, болячка налицо. Интересно, есть центры реабилитации или что-то вроде того для плюсовиков?

t184256 ★★★★★
()
26 сентября 2018 г.
Ответ на: комментарий от Deleted

Господа разработчики С++. Во многих других языках(например раст или хаскелл) такие вещи контроллируются жестче.

Aswed ★★★★★
()
Ответ на: комментарий от Aswed

Что в расте оператором сравнения тоже можно что-то удалять? Оператор сравнения должен только сравнивать. I ♥ C.

Deleted
()
Ответ на: комментарий от Aswed

С лева на право, я сказал что неявно удалять что-то оператором сравнения это неведомая хня, ты сазал что такие вещи в языках как раст контролируются жёсче, я подумал ну если жёсче то это не отменяет поведение, а дополняет его. Короче опуская всё ранее сказанное, согласись перезагрузить оператор сравнения так что бы оно что-то удалял вместо просто сравнения бред. Тоесть оператор сравнения должен просто сравнивать и всё.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.