Fehler, Irrtümer, Fragen - Seite 2466

 

Logischer Fehler

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
}

Was ist der Unterschied zwischen (1) und (2)?

 
A100:

Logischer Fehler

Was ist der Unterschied zwischen (1) und (2)?

In der 1. scheint es einen Fehler zu geben. Und die 2. kann mit j+0 umgangen werden.

 
fxsaber:

In der 1. scheint es einen Fehler zu geben. Und die 2. kann mit j+0 umgangen werden.

Warum brauchen wir eine zusätzliche arithmetische Operation, wenn es auch ohne geht?

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

Warum die zusätzliche arithmetische Operation?

Sie wird nach der Kompilierung nicht mehr vorhanden sein.

 
fxsaber:

Nach der Kompilierung wird sie nicht mehr vorhanden sein.

Das wird sie. Es ist nur so, dass im allgemeinen Fall der Kompilierfehler in den Laufzeitfehler übergehen wird:

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
}

Ergebnis: 2:1

Und in meiner Version: 2:2

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

Das wird sie. Es ist nur so, dass im Allgemeinen ein Kompilierfehler zu einem Laufzeitfehler wird:

Ergebnis: 2:1

Das Ergebnis wird in der Quelle verwechselt. Ich glaube nicht, dass es einen Laufzeitzusatz gibt. Der Compiler ruft einfach die int-Funktion für den Ausdruck auf. Sie berechnet jedoch nicht den Ausdruck selbst.

 

Ich dachte an die Implementierung eines Iterators analog zu C++. Aber eine Traurigkeit entstand....


Frage an die Entwickler:
Welcher der in MQL erlaubten unären Operatoren wird als beste Praxis für die Implementierung einer Dereferenzierungsoperation vorgeschlagen?

  • unär +,-,++,--,!,~
 
Sergey Dzyublik:

Welcher der in MQL erlaubten unären Operatoren wird als beste Praxis für die Implementierung einer Dereferenzierungsoperation vorgeschlagen?

  • unär +,-,++,--,!,~

Wow, es gibt hier in diesem Forum einige Leute, die sich Gedanken über bewährte Verfahren machen.

Am logischsten ist es, sich zu verlagern, weil es nicht möglich ist. (sorry, es erfordert einen Parameter, dann Zusatz als die seltene verwendet) Aber wird es funktionieren ok mit sogar ein?

Bestenfalls können wir es so machen:

(~w).F();

Wegen der Priorität der Punkte müssen Sie sie immer einklammern.

 
Sergey Dzyublik:

Frage an die Entwickler:
Welche unäre Operatorüberladung, die in MQL erlaubt ist, wird als beste Praxis für die Implementierung von Dereferenzierungsoperationen vorgeschlagen?

  • unär +,-,++,--,!,~

Was kann in MQL dereferenziert werden? - selbst Zeiger auf Objekte werden dereferenziert, wenn der Zugriff über Zeigernamen erfolgt

SZZY: Ich wünschte, du könntest deine Energie in etwas Nützliches stecken.... Letzten Monat habe ich zum x-ten Mal versucht, eine Wrapper-Klasse für ein zweidimensionales Array zu erstellen. Ich konnte es nicht schaffen, [] zu überladen, um es als normales zweidimensionales Array arr[1][2] zu adressieren, und Sie sprechen über die Dereferenzierung von Zeigern in MQL ...

 
Igor Makanu:

Ich habe es nicht geschafft, [] zu überladen, um als normales zweidimensionales Array arr[1][2] zu adressieren, und du sprichst von Zeiger-Dereferenzierung in MQL...

das kommt vor )))