Errori, bug, domande - pagina 2466

 

Errore logico

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 è la differenza tra (1) e (2)?

 
A100:

Errore logico

Qual è la differenza tra (1) e (2)?

Sembra che ci sia un errore nel 1°. E il 2° può essere bypassato da j+0.

 
fxsaber:

Sembra che ci sia un errore nel 1°. E il 2° può essere bypassato da j+0.

Perché abbiamo bisogno di un'operazione aritmetica in più quando possiamo farne a meno?

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

Perché l'operazione aritmetica in più?

Non ci sarà più dopo la compilazione.

 
fxsaber:

Non ci sarà più dopo la compilazione.

Lo farà. È solo che nel caso generale, l'errore di compilazione si sposterà nell'errore di esecuzione:

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
}

Risultato: 2:1

E nella mia versione: 2:2

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

Lo farà. È solo che in generale, un errore di compilazione si trasformerà in un errore di esecuzione:

Risultato: 2:1

Il risultato è confuso nella fonte. Non credo che ci sia un'aggiunta di runtime. È solo che il compilatore chiama la funzione int per l'espressione. Ma non calcola l'espressione stessa.

 

Stavo pensando di implementare un analogo iteratore per il C++. Ma una tristezza che sorge....


Domanda per gli sviluppatori:
Quale degli operatori unari permessi in MQL è suggerito come migliore pratica per implementare un'operazione di dereferenziazione?

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

Quale degli operatori unari permessi in MQL è suggerito come migliore pratica per implementare un'operazione di dereferenziazione?

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

Wow, ci sono alcune persone qui su questo forum che pensano alle migliori pratiche.

La cosa più logica da fare è il cambio, per mancanza di esso. (scusate, richiede un parametro, quindi l'aggiunta come quello usato raramente) Ma funzionerà bene anche con uno solo?

Al massimo si può ottenere così:

(~w).F();

Dovrai sempre fare una parentesi a causa della priorità dei punti.

 
Sergey Dzyublik:

Domanda per gli sviluppatori:
Quale overloading di operatore unario permesso in MQL è suggerito come migliore pratica per implementare l'operazione di dereferenziazione?

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

cosa può essere dereferenziato in MQL? - anche i puntatori agli oggetti sono dereferenziati quando si accede al nome del puntatore

SZZY: Vorrei che tu potessi incanalare la tua energia in qualcosa di utile.... Il mese scorso, per l'ennesima volta ho cercato di fare una classe wrapper per un array bidimensionale, non sono riuscito a sovraccaricare [] per indirizzarlo come un normale array bidimensionale arr[1][2], e stai parlando di dereferenziare i puntatori in MQL ...

 
Igor Makanu:

Non sono riuscito a sovraccaricare [] per indirizzarlo come un normale array bidimensionale arr[1][2], e tu stai parlando di dereferenziazione dei puntatori in MQL...

succede )))