Новая версия платформы MetaTrader 5 build 3490: мобильная версия веб-терминала и новые методы матриц в MQL5 - страница 10

 
Странно, что за час до события нет прогноза по % ставке, при том, что это не рядовое событие
 
Это правильное поведение компилятора?
class A {};

void OnStart()
{
  A* a = NULL;
  bool b = true;
  
  if (a); // OK
  if (b && a); // '&&' - illegal operation use

  if (b && (a != NULL)); // OK
}
 
A100 #:
Странно, что за час до события нет прогноза по % ставке, при том, что это не рядовое событие

Несмотря на создание целого мобильного приложения Tradays, Экономический Календарь в МТ5 до сих пор остается в каком-то глючном состоянии:

1) по большей части показателей  выход новых данных в онлайне не поступает в терминал вообще (обновление идет с гигантским лагом),

2)  по части показателей нет прогнозов,

3)  заданный пользователем набор валют/стран не сохраняется после перезапуска терминала

4) отдельно выбранный экономический показатель не возможно отразить на графике, ни на главном чарте, ни в виде индикатора в отдельном подокне.

В общем действительно просьба к разработчикам заняться Экономическим календарем, и обеспечить его функционирование на высоком уровне (эталоном качества по 1) и 2) может служить Investing.com)

 
fxsaber #:
Это правильное поведение компилятора?

Неявное преобразование указателя к bool - вообще лучше из MQL убрать - только путаницу вносит. Пример:

class A {
public:
    bool operator!() { return true; }
    bool operator~() { return true; }
};
void OnStart()
{
    A *a = new A;
    Print( !a, ":", ~a );
}

Результат:   false:true

Ожидалось: true:true

 
A100 #:

Неявное преобразование указателя к bool - вообще лучше из MQL убрать - только путаницу вносит. Пример:

Меня не путает.

 
fxsaber #:

Меня не путает.

Объясните тогда почему все одинаковое, а результат разный:

class A {
public:
    bool operator!() { return true; } /*1*/
    bool operator~() { return true; } /*2*/
};
void OnStart()
{
    A* a = new A;      //Результат:
    /*1*/Print( !a );  //false
    /*2*/Print( ~a );  //true
}

Чем принципиально (1) отличается от (2) ?

 
A100 #:

Объясните тогда почему все одинаковое, а результат разный:

Чем принципиально (1) отличается от (2) ?

Для однозначноти, используйте оператор dereference

class A {
public:
    bool operator!() { return true; } /*1*/
    bool operator~() { return true; } /*2*/
};
void OnStart()
{
    A* a = new A;      //Результат:
    /*1*/Print( ! *a );  //true
    /*2*/Print( ~ *a );  //true
}
 
Ilyas #:

Для однозначноти, используйте оператор dereference

Так я и говорю: для однозначности вместо

    A* a = new A;

    if ( a ) //3

используйте:


   if ( a != NULL ) //4

тогда и такие кривые записи не понадобятся: !*a, ~*a

Т.е. вместе ликвидации самой возможности появления неоднозначности (запрет неявного преобразование указателя к bool) Вы предлагаете устранять ее последствия. А что дает запись (3) по сравнению с (4)? Может быть скорость компиляции выросла в разы или производительность? А ничего не дает - кроме путаницы на ровном месте (вместо a ВЕЗДЕ нужно писать на всякий случай *a, т.е. вместо простого умножения a*b будет дичь *a**b)

 
Ilyas #:

Без претензий, просто для информации прокомментируйте данное поведение компилятора.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Бета-версия платформы MetaTrader 5 build 3470: Расширение диспетчера задач и методы матриц и векторов в MQL5

fxsaber, 2022.11.03 08:14

Это правильное поведение компилятора?
class A {};

void OnStart()
{
  A* a = NULL;
  bool b = true;
  
  if (a); // OK
  if (b && a); // '&&' - illegal operation use

  if (b && (a != NULL)); // OK
}

С этим все останется, как есть сейчас. Верно?

 
fxsaber #:

Без претензий, просто для информации прокомментируйте данное поведение компилятора.

С этим все останется, как есть сейчас. Верно?

В этом смысле согласен - как есть оставлять нельзя:

class A {};
void OnStart()
{
    A* a = new A;        //Результат:
    if (    a && true ); //(1) компилируется
    if ( true && a    ); //(2) не компилируется
}

Либо все разрешить (в ущерб другим операциям) - либо все запретить