Errores, fallos, preguntas - página 2466

 

Error 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
}

¿Cuál es la diferencia entre (1) y (2)?

 
A100:

Error lógico

¿Cuál es la diferencia entre (1) y (2)?

Parece que hay un error en la primera. Y la segunda puede ser evitada por j+0.

 
fxsaber:

Parece que hay un error en la primera. Y la segunda puede ser evitada por j+0.

¿Por qué necesitamos una operación aritmética adicional cuando podemos prescindir de ella?

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

¿Por qué la operación aritmética adicional?

No estará ahí después de la compilación.

 
fxsaber:

No estará ahí después de la compilación.

Lo hará. Es que en el caso general, el error en tiempo de compilación se trasladará al error en tiempo de ejecución:

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

Y en mi versión: 2:2

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

Lo hará. Es que en general, un error de compilación se convertirá en un error de ejecución:

Resultado: 2:1

El resultado se confunde en la fuente. No creo que haya una adición de tiempo de ejecución. Es que el compilador llama a la función int para la expresión. Pero no calcula la expresión en sí.

 

Estaba pensando en implementar un análogo del iterador para C++. Pero surge una tristeza....


Pregunta para los desarrolladores:
¿Cuál de los operadores unarios permitidos en MQL se sugiere como mejor práctica para implementar una operación de desreferenciación?

  • unario +,-,++,--,!,~
 
Sergey Dzyublik:

¿Cuál de los operadores unarios permitidos en MQL se sugiere como mejor práctica para implementar una operación de desreferenciación?

  • unario +,-,++,--,!,~

Vaya, hay gente en este foro que piensa en las mejores prácticas.

Lo más lógico es cambiar, a falta de ello. (lo siento, requiere un parámetro, entonces la adición como el poco utilizado) Pero, ¿funcionará bien incluso con uno?

Como mucho podemos conseguirlo así:

(~w).F();

Siempre tendrás que ponerlo entre paréntesis debido a la prioridad de puntos.

 
Sergey Dzyublik:

Pregunta para los desarrolladores:
¿Qué operador unario de sobrecarga permitido en MQL se sugiere como mejor práctica para implementar la operación de desreferenciación?

  • unario +,-,++,--,!,~

¿Qué se puede dereferenciar en MQL? - incluso los punteros a objetos son desreferenciados cuando se accede por el nombre del puntero

SZZY: Me gustaría que pudieras canalizar tu energía en algo útil.... El mes pasado, por enésima vez intenté hacer una clase envolvente para un array bidimensional, no conseguí sobrecargar [] para direccionar como un array bidimensional normal arr[1][2], y estás hablando de desreferenciar punteros en MQL...

 
Igor Makanu:

No he conseguido sobrecargar [] para direccionar como un array bidimensional normal arr[1][2], y estás hablando de desreferenciación de punteros en MQL...

sucede )))