Ошибки, баги, вопросы - страница 3474
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Это порядок вычисления всего выражения, а не его подвыражений.
Почитайте здесь.
пункт 6
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.
Другими словами слева-направо
В любом компиляторе C++.
И не справа налево, а как захочется компилятору.
В стандарте языка это не определено.
Здесь на вызов оператора bool(const A&,const A&), а вызов метода void A::operator &&(const A&). Поэтому, вроде как да, это баг компилятора.
Но, есть одно но, из великого и могучего: https://en.cppreference.com/w/cpp/language/eval_order
Так вот. Я несколько раз перечитал, тема реально мутнейшая, и не нашел в стандарте указания, что . порождает sequence point.
Поэтому, если я все правильно понимаю (тут я не уверен на 100%, если есть спецы по теме, поправьте, но только с ссылками на стандарт), то при вызове f(1).operator &&(f(2)), компилятор реально имеет право вызвать f(1) и f(2) в любом порядке.
Если отказаться от операторов в пользу методов, то будет понятнее причина.
У каждой ошибки есть какая то причина
Чем Вас п.6 не устроил ?
пункт 6
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.
Другими словами слева-направо
https://en.cppreference.com/w/cpp/language/operator_logical
Так, что нормально все, компилятор в своем праве)
Это означает лишь то, что правый должен в любом случае вычисляться наряду с левым, а порядок вычисления определяется п.6
слева-направоЭто означает лишь то, что правый должен в любом случае вычисляться наряду с левым, а порядок вычисления определяется п.6
Нет, не определяется.
behave like regular function calls
Это обычная функция, которая никакого отношения к оператору && уже не имеет. Если я не прав, то укажи на пункт стандарта
behave like regular function calls
Т.е. в Microsoft дураки сидят ?!
В одном случае 1-2-3, а в другом 2-1-3 сделали ?
Т.е. в Microsoft дураки сидят ?!
В одном случае 1-2-3, а в другом 2-1-3 сделали ?