OOP, modelos e macros em mql5, sutilezas e usos - página 25

 

fxsaber:

Provavelmente, alguns compiladores darão avisos em tais situações.

O especificador se refere a uma referência, não ao objeto como um todo, tudo é legítimo, por que o compilador deveria jurar?

 
TheXpert:

o especificador se refere à referência e não ao objeto como um todo, tudo é legítimo, por que o compilador deveria jurar?

Provavelmente, se fosse, não haveria repreensão aqui.

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:

Provavelmente, se esse fosse o caso, não haveria aqui nenhum palavrão.

Este é um objeto constante, então é lógico que um objeto constante não pode ter uma referência não-constante

 
TheXpert:

Este é um objeto constante, portanto, é lógico que um objeto não constante não pode ter uma referência não constante.

Como faço para me referir a um objeto constante?

 
fxsaber:

Como posso fazer referência a um objeto constante?

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

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

Acrescente uma sobrecarga.

 
Vladimir Simakov:

Sobrecarga para acrescentar.

Essa sobrecarga não está em um elo constante?

Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos

OOP, modelos e macros em mql5, dicas e truques

TheXpert, 2020.02.26 15:24

O especificador se refere à referência e não ao objeto como um todo

 
fxsaber:

Essa sobrecarga não é uma referência constante?

O que você quer fazer?

 
fxsaber:

Tal sobrecarga não é uma sobrecarga em uma referência constante?

Se você quiser que o compilador trave em seu primeiro exemplo, ele não vai funcionar, porque lá tudo é legal: você não muda a instância do objeto por referência, você muda a instância do objeto para o qual o método é chamado, enquanto o fato de que pode ser o mesmo objeto não é problema do compilador, mas sim da dor de cabeça do programador.

Para uma classe, você pode fazer este truque (para estrutura, você não pode):

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:

Se você quiser que o compilador dê seu primeiro exemplo, não o fará, porque tudo lá é legal.

Não se trata de legalidade, mas do fato de que o modificador constante não garante que o objeto permanecerá inalterado.

 

Fórum sobre comércio, sistemas automatizados de comércio e teste de estratégias comerciais

OOP, modelos e macros em mql5, dicas e truques

fxsaber, 2020.02.25 22:23

Nunca vi esta expressão retornar falsa.
ORDER_TIME_DONE_MSC == DEAL_TIME_MSC

É por isso que é difícil manter estatísticas sobre o tempo de execução da ordem com base no histórico comercial.

Se ainda podemos comparar o valor doORDER_TIME_SETUP_MSC para ordens de mercado, ele não tem sentido para ordens pendentes.


Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos

Bibliotecas: 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


Até dois minutos de execução em uma conta corrente. Compartilhe suas estatísticas aqui. O roteiro não utiliza nenhuma biblioteca, é adequado para Netting/Hedging.