Erros, bugs, perguntas - página 2466

 

Erro lógico

void f( const int  ) {}
void f( const int& ) {}
void OnStart()
{
          int i = 0; f( i ); //(1) нормально
    const int j = 0; f( j ); //(2) Error: 'f' - ambiguous call to overloaded function with the same parameters
}

Qual é a diferença entre (1) e (2) ?

 
A100:

Erro lógico

Qual é a diferença entre (1) e (2) ?

Parece haver um erro no primeiro. E o 2º pode ser contornado por j+0.

 
fxsaber:

Parece haver um erro no primeiro. E o 2º pode ser contornado por j+0.

Porque é que precisamos de uma operação aritmética extra quando podemos passar sem ela?

        const int j = 0; f((int)j);
 
A100:

Porquê a operação aritmética extra?

Não estará lá após a compilação.

 
fxsaber:

Não estará lá após a compilação.

Vai. É que, no caso geral, o erro de tempo de compilação passará para o erro de tempo de execução:

void f( const int  ) { Print( 1 ); }
#define  int short
//...
void f( const int  ) { Print( 2 ); }
void f( const int& ) { Print( 3 ); }
void OnStart()
{                     //Результат:
          int i = 0; f( i   );  //2
    const int j = 0; f( j+0 );  //1
}

Resultado: 2:1

E na minha versão: 2:2

void OnStart()
{                     //Результат:
          int i = 0; f( i   );  //2
    const int j = 0; f((int)j); //2
}
 
A100:

Vai. É que, em geral, um erro de tempo de compilação irá passar para um erro de tempo de execução:

Resultado: 2:1

O resultado é misturado na fonte. Não me parece que haja uma adição de tempo de execução. É apenas o compilador que chama a int-função para a expressão. Mas não calcula a expressão em si.

 

Estava a pensar em implementar um análogo iterador para C++. Mas surgiu uma tristeza....


Pergunta para programadores:
Qual dos operadores unários permitidos na MQL é sugerido como melhor prática para implementar uma operação de desreferenciação?

  • unário +,-,++,--,!,~
 
Sergey Dzyublik:

Qual dos operadores unários permitidos na MQL é sugerido como melhor prática para implementar uma operação de desreferenciação?

  • unário +,-,++,--,!,~

Uau, há aqui algumas pessoas neste fórum que pensam nas melhores práticas.

A coisa mais lógica a fazer é mudar, por falta disso. (desculpe, requer um parâmetro, depois adição como o raramente utilizado) Mas funcionará bem mesmo com um?

No máximo, podemos obtê-lo desta forma:

(~w).F();

Terá sempre de o colocar entre parênteses por causa da prioridade do ponto.

 
Sergey Dzyublik:

Pergunta para programadores:
Qual é a sobrecarga de operador não-automático permitida no MQL é sugerida como melhor prática para implementar a operação de desreferenciação?

  • unário +,-,++,--,!,~

o que pode ser desreferenciado em MQL ? - mesmo as indicações de objectos são desreferenciadas quando acedidas pelo nome do ponteiro

SZZY: Gostaria que pudesse canalizar a sua energia para algo útil.... No mês passado, pela enésima vez que tentei fazer uma classe de embalagem para uma matriz bidimensional, não consegui sobrecarregar [] para tratar como uma matriz bidimensional normal[1][2], e está a falar de apontadores de desreferenciação em MQL ...

 
Igor Makanu:

Não consegui sobrecarregar [] para abordar como um arr normal bidimensional[1][2], e estás a falar de desreferenciamento de ponteiro em MQL...

acontece ))))