Erros, bugs, perguntas - página 1637

 
Slawa:

1. Cinco ou quatro? Vou adivinhar um quatro. Basta aumentar a janela de teste.

2. tomá-lo e testá-lo

Haha, muito obrigado (mt4)
1366 x 768 (( um terço do ecrã precisa de ser esticado.
A sua habilidade de clarividência está ao nível.

 
A100:

Vamos tomar um exemplo mais fácil

Em termos formais, quantas chamadas do tipo A( A& ) existem? Um. Pelo menos C++ não cria nenhum objecto intermédio

Talvez a RVO (return value optimization) esteja definida por defeito em C++?
 
A100:

1. Dupla chamada do construtor da cópia

2. Nenhuma mensagem de "memória vazada" (nova sem apagar)

  1. Correctamente dito sobre a optimização do RVO (também existe NRVO), actualmente não está no compilador MQL, mas será adicionado no futuro (por agora consideramos esta optimização como uma tarefa não prioritária).
  2. não se reproduz, por favor verifique duas vezes, pode não ter especificado detalhes importantes para a reprodução.
 
Ilyas: 2. não se reproduz, por favor verifique novamente, pode não ter especificado detalhes importantes para a reprodução.

Exemplo simplificado

class A { public:
    A()          { Print( __FUNCTION__ ); }
    virtual ~A() { Print( __FUNCTION__ ); }
};
void OnStart()
{
    new A();
}

Resultado:

2016.08.15 14:17:39.093 Roteiro1 (GBPUSD,M15) A::A

Conclusão: nenhum destruidor é chamado e nenhuma mensagem de fuga de memória ao mesmo tempo (como no exemplo seguinte)

//Script2.mq5
class A { public:
    A()          { Print( __FUNCTION__ ); }
    virtual ~A() { Print( __FUNCTION__ ); }
};
void OnStart()
{
    A *a = new A();
}

Resultado:

2016.08.15 14:26:27.993 Roteiro2 (GBPUSD,M15) 16 bytes de memória vazada
2016.08.15 14:26:27.993 Roteiro2 (GBPUSD,M15) 1 objecto de tipo A à esquerda
2016.08.15 14:26:27.993 Roteiro2 (GBPUSD,M15) 1 objectos por seleccionar
2016.08.15 14:26:27.992 Roteiro2 (GBPUSD,M15) A::A

 
Obrigado pelo esclarecimento. Reproduzido - sem mensagem de fuga e aqui está o porquê:

O optimizador está aqui sobre-optimizado, uma vez que não existem operações na memória ou no ponteiro que foram criadas no novo operador, a atribuição desta memória foi removida.

Vamos considerar se devemos corrigir este "bug" no optimizador ou melhorá-lo de modo a que guardar um ponteiro numa variável não utilizada não bloqueie a eliminação da nova operação.

 
Boa tarde.
Por favor informe os programadores porque é que a MQL4 e a MQL5 têm a função de remover uma subjanela indicadora de um Expert Advisor, enquanto não têm a função de criar uma janela indicadora.
Tenho de utilizar modelos ou iniciar manualmente o indicador da janela, o que não é conveniente porque a informação no gráfico se perde.
Também gostaria de poder iniciar e exibir indicadores a partir de um ficheiro de recursos.
Ou aconselhar como o fazer.
 
Slawa:

Não foi você quem organizou a "dica de visualização"?

O que o faz pensar que se trata de um insecto? O nome da pasta corresponde ao número da porta em que foi feita a ligação

Fui eu..... Obrigado, já o tenho.
 
Fazendo uma macro
#define  MACROS(A) "##A##"
Eu quero que MACROS(Num) seja substituído por "Num", mas o resultado é sempre "##A####". É possível definir uma macro para obter o que quero?

 

Fiz uma pequena descoberta para mim

void OnStart()
{  
  double dPrice = 1.08249;
  int iPrice = (int)((dPrice / _Point) + 0.1);
  double dNewPrice = iPrice * _Point; // При этом нормализации это значение не требует в OrderSend
  
  if (dPrice != dNewPrice)
    Print((string)(dPrice - dNewPrice)); 
}

Se abrir uma encomenda no Ponto * Inteiro (sem normalização) e depois solicitar o preço de abertura, este será diferente do Ponto * Inteiro não normalizado.

Porque é que a OrderSEnd utiliza SEMPRE preços inteiros não normalizados * Pontos?

 
fxsaber:
Estou a fazer uma macro que quero que MACROS(Num) seja substituída por "Num", mas acaba sempre por "##A####". É possível definir uma macro para obter o que quero?

Retirar as vírgulas invertidas do corpo da macro

Para converter um parâmetro macro para uma cadeia, usar #:

#define  MACROS(A) #A
## é usado para concatenar fichas