ООП, шаблоны и макросы в mql5, тонкости и приёмы использования - страница 25

 

fxsaber:

Наверное, в таких ситуациях некоторые компиляторы выдают предупреждения.

спецификатор относится к ссылке, а не к объекту в целом, все законно, почему компилятор должен ругаться?

 
TheXpert:

спецификатор относится к ссылке, а не к объекту в целом, все законно, почему компилятор должен ругаться?

Наверное, если бы это было так, то здесь не было бы ругани.

void g1( A& ) {}
void g2( const A& ) {}

void OnStart()
{
  const A a;
  
  g1(a); // 'a' - constant variable cannot be passed as reference
  g2(a); // OK
}
 
fxsaber:

Наверное, если бы это было так, то здесь не было бы ругани.

а здесь как раз объект константный, логично что для константного объекта не может быть неконстантной ссылки

 
TheXpert:

а здесь как раз объект константный, логично что для константного объекта не может быть неконстантной ссылки

Как сделать ссылку на константный объект?

 
fxsaber:

Как сделать ссылку на константный объект?

void g1( A& ) {}
void g1(const A& ){}
void g2( const A& ) {}

void OnStart()
{
  const A a;
  
  g1(a);
  g2(a);
}

Перегрузку добавить.

 
Vladimir Simakov:

Перегрузку добавить.

Такая перегрузка разве не является перегрузкой на константную ссылку?

 
fxsaber:

Такая перегрузка разве не является перегрузкой на константную ссылку?

А Вы что хотите сделать?

 
fxsaber:

Такая перегрузка разве не является перегрузкой на константную ссылку?

Если Вы хотите, что бы вам компилятор ругнулся на Ваш первый пример, то не выйдет, потому, что там все законно: вы не меняете экземпляр объекта по ссылке, вы меняете экземпляр объекта для которого вызван метод, а то, что это может быть один и тот же объект, так это не проблема компилятора, а головная боль программиста.

Для класса можно вот такой финт сделать (для структуры не получится):

class A
{
  int i;
public:
  void f( const A &Value )  
  {
    Print(Value.i); // 0
    
    if (&this!=&Value) this.i = Value.i + 1;
    
    Print(Value.i); // 1
  }
};

void OnStart()
{
  A a;
  
  a.f(a);
}
 
Vladimir Simakov:

Если Вы хотите, что бы вам компилятор ругнулся на Ваш первый пример, то не выйдет, потому, что там все законно

Речь не о законности, а о том, что модификатор const не гарантирует неизменность объекта.

 

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

ООП, шаблоны и макросы в mql5, тонкости и приёмы использования

fxsaber, 2020.02.25 22:23

Ни разу не встречал, чтобы это выражение возвращало false.
ORDER_TIME_DONE_MSC == DEAL_TIME_MSC

Поэтому сложно вести статистику времени исполнения ордера на основании истории торгов.

Если для маркет-ордеров еще можно сопоставить значение ORDER_TIME_SETUP_MSC, то для отложек оно бессмысленно.


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

Библиотеки: MT4Orders

fxsaber, 2020.02.27 09:40

0 - 348806: 00:01:57.311
1 - 348530: 00:01:39.027
2 - 348494: 00:01:15.259
3 - 348406: 00:01:07.671
4 - 348950: 00:01:04.869
5 - 348960: 00:01:02.888
6 - 348814: 00:01:00.654
7 - 348392: 00:01:00.642
8 - 348508: 00:00:54.515
9 - 348550: 00:00:54.467


До двух минут исполнение на запущенном счете. Поделитесь здесь своей статой. Скрипт никакие библиотеки не использует, подходит для Неттинг/Хеджа.