Ошибки, баги, вопросы - страница 3479
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вы должны быть честными с приоритетом.
Задача была доказать, что && не равносильно operator && (|| не равносильно operator||) - здесь и далее - речь о перегруженных операторах в разной записи
operator&& ведет себя не как &&, а как функция operator88
А то, что свою роль в этом сыграл приоритет - так это только усиливает доказательство - причина не важна, важен результат. По крайней мере Вы признали, что приоритет все-таки действует на && и не действует на operator&&
Если бы && (||) была бы обычной функцией, то результат был бы одинаковым, а он - разный
А если приоритет сохранился, то почему остальное не может сохранится (кроме ленивости конечно - она принципиально невозможна)
Опять же - не на пустом месте это отменили (until C++17)Вы должны быть честными с приоритетом.
Для полноты доказательства, что перегруженный оператор не равносилен методу\функции - возьмем операторы с одинаковым приоритетом:
Результат все-равно - разный. Доказательство завершено!Для полноты доказательства, что перегруженный оператор не равносилен методу\функции - возьмем операторы с одинаковым приоритетом:
Результат все-равно - разный. Доказательство завершено!Доказательство чего? Проверьте, что это дает на C++!
А вы продолжаете сравнивать то, что не сравнимо!
Это лишь доказывает, что порядок последовательности не определен и на него не следует полагаться.
Утверждаете, что эти два оператора не являются завуалированными методами? Где почитать про это?
https://en.cppreference.com/w/cpp/language/operators
Welcome)))
Доказательство чего? Проверьте, что это дает на C++!
А вы продолжаете сравнивать то, что не сравнимо!
Это лишь доказывает, что порядок последовательности не определен и на него не следует полагаться.
Доказательство того, что выделено фиолетовым в Википедии: перегрузка операторов не меняет их приоритет и ассоциативность
На С++ результат как выяснилось зависит от компилятора этот получен на C++20 Shell
А какая принципиальная разница между (1) и (2) ?
Кончайте уже причиндаламаи меряться)))
https://en.cppreference.com/w/cpp/language/operator_precedence
https://en.cppreference.com/w/cpp/language/operators
https://en.cppreference.com/w/cpp/language/eval_order
Вот вам для изучения, погружайтесь в неведомое))) Там хардкор, Будапешт отдыхает)))
PS/ В С++ нельзя полагаться на тест поведения, сделанный на компиляторе. Даже если все компиляторы, доступные вам показали идентичное поведение. А потом, вы, решив супер-пупер ускорить свой код, засунули его в, например, icc с ключом /Oipo и сильно прихренели от изменившегося поведения (а вот это уже из реального опыта, после этого всем коллективом, пару-тройку недель, выпиливали UB из десятилетнего легаси, пока не добились детерминированного результата).
PSS. И я не просто так всегда топлю за недопустимость вот такого:
,хотя прекрасно знаю, что и msvs и gcc абсолютно ожидаемо это обрабатывают, вот только с точки зрения стандарта С++, в обоих случаях UB. Кстати, в случае с С, фишка с union законна.
https://en.cppreference.com/w/cpp/language/operators
Welcome)))
До C++17 operatator&& - обычный метод.
До C++17 operatator&& - обычный метод.
Обрати внимание на это
В любом случае будут оценены оба операнда. То, что ты написал, это как раз в тему к А100, каюсь, не заметил. Да, начиная после c++17 при перегрузке перестает теряться
Every value computation and side effect of the first (left) argument of the built-in logical AND operator &&, the built-in logical OR operator || and the built-in comma operator , is sequenced before every value computation and side effect of the second (right) argument.
Это значит, что стандарт гарантирует последовательность оценки операндов. В нашем случае сначала должно вызываться f(1) и только потом f(2).
PS Я же говорю, Будапешт отдыхает)))
всем коллективом, пару-тройку недель, выпиливали UB из десятилетнего легаси, пока не добились детерминированного результата.
Это UB?