Vladislav Boyko #: Очень распространенные примеры инициализации чего-то, где порядок оценки операндов критически важен:
Из того примера не очевидно, что порядок оценки операндов критически важен. Вот другой пример:
class A
{
public:
bool initialize();
intget();
};
class B
{
public:
bool initialize(int a);
intget();
};
class C
{
public:
bool initialize(int a, int b);
};
bool f()
{
A a;
B b;
C c;
// .get() should not be called before .initialize()return(a.initialize() && b.initialize(a.get()) && c.initialize(a.get(), b.get()));
}
Интересно, почему для C# Microsoft разделяет [Logical AND operator &, Logical OR operator |, Logical exclusive OR operator ^] и bitwiseверсии этих операторов. При этом их C++ reference говорит только про bitwise версии (как и документация по MQL). Я слаб в побитовой арифметике. Logical и bitwise версии это одно и то же или нет? Будут ли в MQL побитовые операторы примененные к bool операндам работать так же, как это описывается по ссылкам, которые я привел?
Vladislav Boyko #: Logical и bitwise версии это одно и то же или нет?
Совсем нет. Побитовые - это когда идёт работа с машинным представлением числа(или символа, ...) как с набором битовых флагов. В первом приближении это можно представить как структуры булевых переменных и логические операции над такими структурами.
Именно в этой иллюстрации явный баг. Переменная уже должна быть инициализирована новым значением, но отладчик отображает предыдущее.
А тут вариантов только два. Или разработчики исправят, или надо помнить о таких вариантах и не пытаться применять всяческие извращения которые зачастую приводят к непредсказуемому результату.
Совсем нет. Побитовые - это когда идёт работа с машинным представлением числа(или символа, ...) как с набором битовых флагов. В первом приближении это можно представить как структуры булевых переменных и логические операции над такими структурами.
То есть, вот это и вот это - разные вещи, я правильно понимаю?
То есть, вот это и вот это - разные вещи, я правильно понимаю?
Просто, если операнды булевы, то их значения: 0 или 1. Результаты логических операций | и & с такими операндами тоже 0 или 1, они преобразуются в булевы "ложь" и "истина". А сами операции по ссылкам одинаковы.
Вы НЕ МОЖЕТЕ полагаться на порядок выполнения или на то, как компилятор будет оценивать операнды.
Надеюсь, что оценка операндов в логических операциях всегда слева направо. Если это так, то это только благодаря brief estimate?
Очень распространенные примеры инициализации чего-то, где порядок оценки операндов критически важен:
Очень распространенные примеры инициализации чего-то, где порядок оценки операндов критически важен:
Из того примера не очевидно, что порядок оценки операндов критически важен. Вот другой пример:
Надеюсь, что оценка операндов в логических операциях всегда слева направо. Если это так, то это только благодаря brief estimate?
Очень распространенные примеры инициализации чего-то, где порядок оценки операндов критически важен:
Интересно, почему для C# Microsoft разделяет [Logical AND operator &, Logical OR operator |, Logical exclusive OR operator ^] и bitwise версии этих операторов. При этом их C++ reference говорит только про bitwise версии (как и документация по MQL). Я слаб в побитовой арифметике. Logical и bitwise версии это одно и то же или нет? Будут ли в MQL побитовые операторы примененные к bool операндам работать так же, как это описывается по ссылкам, которые я привел?
Видимо я не смогу объяснить так, чтобы было понятно…
Вот смотри… Казалось бы переменной уже присвоено новое значение, ан нет, пока ещё j равна 2
Logical и bitwise версии это одно и то же или нет?
Совсем нет. Побитовые - это когда идёт работа с машинным представлением числа(или символа, ...) как с набором битовых флагов. В первом приближении это можно представить как структуры булевых переменных и логические операции над такими структурами.
А тут вариантов только два. Или разработчики исправят, или надо помнить о таких вариантах и не пытаться применять всяческие извращения которые зачастую приводят к непредсказуемому результату.
Совсем нет. Побитовые - это когда идёт работа с машинным представлением числа(или символа, ...) как с набором битовых флагов. В первом приближении это можно представить как структуры булевых переменных и логические операции над такими структурами.
То есть, вот это и вот это - разные вещи, я правильно понимаю?
То есть, вот это и вот это - разные вещи, я правильно понимаю?
Там же видно, что разные. Но да, как-то не по-людски там сделано.
То есть, вот это и вот это - разные вещи, я правильно понимаю?