Ошибки, баги, вопросы - страница 3228

 
A100 #:

Вот код:

Если (*) компилируется без ошибки, тогда вместо (1) можно было бы записать (2) - т.е. мы неявно обходим ограничение (1), поэтому С++ при компиляции (*) выдает ошибку

Действительно, пусть лучше будет ошибка.
 
A100 #:

Вот код:

Если (*) компилируется без ошибки, тогда вместо (1) можно было бы записать (2) - т.е. мы неявно обходим ограничение (1), поэтому С++ при компиляции (*) выдает ошибку

Пока не вижу проблемы.

class A {};
void OnStart()
{
  const A *a = new A;
  
//  A *b = a; // '=' - cannot convert from const pointer to nonconst pointer
  A *b = (A*)a; // OK.
}
 

И пора бы уже добавить ошибку компилятора в следующем месте:

class A {};
class B:public A {};

void func( B*) {}

void OnStart()
  {
   A* a =new B;
   func(a);        //здесь должна быть ошибка компилятора
   func((B*)a);    //если надо, можно так
  }
P.S. Или хотя бы warning
 
fxsaber #:

Пока не вижу проблемы.

Вы путаете явное и неявное преобразование. Вы явно преобразовали const к non const, а здесь неявное (помимо воли пользователя)

 
В этом и заключается проблема:

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

Ошибки, баги, вопросы

A100, 2022.08.22 18:49

const - это не украшение - в грамотных компиляторах const объекты помещают в защищенную (только для чтения) область памяти, т.е. вы даже явно (обойдя программные ограничения) не сможете его изменить

Грамотный компилятор поместит const объект в защищенную (только для чтения) память. Неявное преобразование будет пытаться его изменить, но не сможет - т.е. при выполнении будет трудноуловимая вычислительная ошибка. А явное преобразование указывает компилятору, что const объект не нужно помещать в защищенную память, поскольку он будет в дальнейшем изменен  

 
A100 #:

Вы путаете явное и неявное преобразование. Вы явно преобразовали const к non const, а здесь неявное (помимо воли пользователя)

Неявные же по четким правилам должны происходить. Почему здесь это правило не прописано - не знаю. Вместо ошибки логично выдавать предупреждение и только.

 
A100 #:
В этом и заключается проблема:

Грамотный компилятор поместит const объект в защищенную (только для чтения) память. Неявное преобразование будет пытаться его изменить, но не сможет - т.е. при выполнении будет трудноуловимая вычислительная ошибка. А явное преобразование указывает компилятору, что const объект не нужно помещать в защищенную память, поскольку он будет в дальнейшем изменен  

Странная логика, когда const-объект становится nonconst.

class A
{
public:
  int i;
};
void OnStart()
{
  const A a;
 
//  a.i = 123; // 'i' - constant cannot be modified
  ((A*)(&a)).i = 123; // OK.
  ((A)(a)).i = 123; // OK.
  Print(a.i);
}

Поэтому и говорю, что все объекты являются nonconst. И только переменные (включая временные), что на них ссылаются, могут иметь свойство const.

 

Просмотр аргументов методов при нажатии Ctrl + Shift + Space сейчас в одну строку.

Это очень неудобно, когда параметров много. На небольших экранах строка такой всплывающей подсказки не умещается на экране.

Нужен многострочный вариант.

 

Разработчики МКЛ, прошу обратить внимание на существующую проблему https://www.mql5.com/ru/forum/430771

MQL5 проблемы с ATR в выходные дни.
MQL5 проблемы с ATR в выходные дни.
  • 2022.08.15
  • www.mql5.com
Надеюсь это увидят разработчики терминала...
 

Оптимизация на локальном компютере, задействованы два символа.

Оказывается, что по второму символу истории недостаточно - начинается подкачка, но не дождавшись её окончания (предположительно) выдаются задания агентам, агенты не могут синхронизироваться.

Вместо того, что бы снова им дать историю, происходит по кругу попытка синхронизации, что приводит к остановке оптимизации.

JD 0 17:45:17.524 127.0.0.1 tester forced to stop
CM 0 17:45:21.471 Symbols AUDUSD: symbol to be synchronized
ME 2 17:45:21.471 Symbols symbol AUDUSD synchronization error
RS 2 17:45:21.471 Indicator_optimize_tester (EURUSD,M1) 2020.01.01 00:00:00 indicator Gator Oscillator cannot load [4801]
DP 0 17:45:21.471 Indicator_optimize_tester (EURUSD,M1) 2020.01.01 00:00:00 {Indicator_optimize_tester.mq5->OnInit->301->u2.0} => I_opt: Индикатор "IND_GATOR" не создан:Неизвестный символ:%s
ME 0 17:45:21.471 Tester 0 of 12 passes processed (0 successfully finished) in 0:00:00.000
IQ 0 17:45:21.471 optimize Experts\Greshnik\Indicator_optimize_tester.ex5 on EURUSD,M1 thread finished
NP 0 17:45:22.468 127.0.0.1 prepare for shutdown
HJ 0 17:45:24.444 127.0.0.1 login (build 3403)
IJ 0 17:45:24.452 Tester account info found with currency USD
JN 0 17:45:24.452 Network 1478 bytes of tester parameters loaded
FJ 0 17:45:24.452 Network 30916 bytes of input parameters loaded
FP 0 17:45:24.453 Network 41708 bytes of optimized inputs info loaded
CO 0 17:45:24.471 Tester successfully initialized
MS 0 17:45:24.471 Network 3668 bytes of total initialization data received
JG 0 17:45:24.471 Tester Intel Xeon E5-2470 0 @ 2.30GHz, 49103 MB
DF 0 17:45:24.471 Tester optimization pass 0 started (batch of 9 tasks)
HS 0 17:45:24.471 127.0.0.1 prepare for shutdown
CM 0 17:45:34.011 127.0.0.1 login (build 3403)
OI 0 17:45:34.019 Tester account info found with currency USD
JQ 0 17:45:34.020 Network 30916 bytes of input parameters loaded
RJ 0 17:45:34.020 Tester successfully initialized
KQ 0 17:45:34.020 Network 1597 bytes of total initialization data received
GE 0 17:45:34.020 Tester Intel Xeon E5-2470 0 @ 2.30GHz, 49103 MB
NP 0 17:45:34.020 Tester optimization pass 9 started (batch of 9 tasks)
ME 0 17:45:34.020 127.0.0.1 prepare for shutdown
LO 0 17:45:44.008 127.0.0.1 login (build 3403)

Более детальные логи могу предоставить по требованию разработчикам.

Причина обращения: