Ошибки, баги, вопросы - страница 3474
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
В любом компиляторе C++.
И не справа налево, а как захочется компилятору.
В стандарте языка это не определено.
Конкретно в каком С++ компиляторе у вас получился результат этого примера 2-1-3 ?
Конкретно в каком С++ компиляторе у вас получился результат этого примера 2-1-3 ?
Даже проверять не буду.
Какая разница в каком компиляторе в данный момент получится такой результат?
Это может измениться в любой момент при очередном обновлении или по другим неизвестным причинам.
Если стандартом это не определено, значит ни на какой порядок полагаться нельзя.
Даже проверять не буду.
Какая разница в каком компиляторе в данный момент получится такой результат?
Это может измениться в любой момент при очередном обновлении или по другим неизвестным причинам.
Если стандартом это не определено, значит ни на какой порядок полагаться нельзя.
Конечно не будете - потому что в любом нормальном компиляторе результат будет 1-2-3
Разберитесь сначала в вопросе, а потом уже комментируйте
Конечно не будете - потому что в любом нормальном компиляторе результат будет 1-2-3
Разберитесь сначала в вопросе, а потом уже комментируйте
А Вы видимо разобрались? Тогда приведите ссылку на стандарт.
Бессмысленность проверки в компиляторе я уже обосновал.
А Вы видимо разобрались? Тогда приведите ссылку на стандарт.
Бессмысленность проверки в компиляторе я уже обосновал.
Вот информация из справочника Microsoft
Приоритет оператора C++ и таблица ассоциативности
т.е. порядок не произвольный, а строго регламентирован Таблицей ассоциативности, и там не у всех операторов она слева направо, например у &= наоборот справа-налево
Вот информация из справочника Microsoft
Приоритет оператора C++ и таблица ассоциативности
т.е. порядок не произвольный, а строго регламентирован Таблицей ассоциативности, и там не у всех операторов она слева направо, например у &= наоборот справа-налево
Это порядок вычисления всего выражения, а не его подвыражений.
Почитайте здесь.
Ошибка при выполнении:
Результат: 2-1-3
Ожидалось: 1-2-3
Если отказаться от операторов в пользу методов, то будет понятнее причина.
Что в этом выражении вычислять первым?
Результат.
Т.е. сначала вычисляется входной параметр, а затем - все остальное.
Это порядок вычисления всего выражения, а не его подвыражений.
Почитайте здесь.
пункт 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) в любом порядке.
Если отказаться от операторов в пользу методов, то будет понятнее причина.
У каждой ошибки есть какая то причина