Fehler, Irrtümer, Fragen - Seite 2200

 

Was bedeutet das?

2018.04.24 14:02:21.721 Books   invalid book item[Si-6.18,buy,61996.00000,-50]
 
fxsaber:
Warum gibt das Skript nichts aus?
weil es sich um eine Zeigerübertragung und nicht um eine Wertübertragung handelt
 
Комбинатор:
weil es sich um einen Verweis und nicht um einen Wert handelt

Ich verstehe das überhaupt nicht. Hier ist der Code

class A
{
public:
  template <typename T>
  void operator =( T& ) // Без ссылки работает
  {
    Print(__FUNCSIG__);
  }
  
  void operator =( int )
  {
    Print(__FUNCSIG__);
  }
};

void f( A*& )
{
  Print(__FUNCSIG__);
}

void OnStart()
{
  A* a = new A;  
  
  A b;  
  b = a; // cannot convert type ' *' to reference of type 'A *'
  
  a = a;
  a = 1;
  
  f(a);
  
  delete a;
}

Es beschwert sich irgendwie über die Übergabe eines Zeigers per Referenz. Gleichzeitig erhält die Funktion f in aller Ruhe den Zeiger als Referenz.


Das Ergebnis ist

void A::operator=<A*>(A*)
void A::operator=(int)
void f(A*&)

Der int-Operator wurde ohne Probleme aufgerufen, der Pointer-Operator hingegen nicht.

 
Logischerweise sollte es auch nicht ohne einen Verweis funktionieren (imho). Dies könnte eine Eigenschaft von MQL-Zeigern sein - dass sie nicht dereferenziert werden müssen.
 
Комбинатор:
Logischerweise sollte es nicht ohne Verweis funktionieren (imho). Es kann eine Funktion von Mql-Zeigern sein - sie müssen nicht dereferenziert werden.

Eine Bitte an alle, die sich mit der Materie auskennen: Lasst es uns herausfinden. Das ist im Moment ein ziemliches Durcheinander.

Früher dachte ich, dass ein Operator nur eine der Methoden ist, die aufgrund ihrer Syntax bequem zu verwenden ist. Und keine andere Unterscheidung. Nun stellt sich heraus, dass das nicht immer der Fall ist.

 
fxsaber:

Ich dachte immer, dass ein Operator nur eine der Methoden ist, mit denen

jeder Betreiber ja. aber

1. operator = einer der beliebtesten

2. der einzige Operator, der vom Compiler erzeugt wird

 
Комбинатор:

jeder Betreiber ja. aber

1. Operator = einer der meistgefragten

2. der einzige Operator, der vom Compiler erzeugt wird

Also überladener/überschriebener Operator.

 

Ich habe mich geirrt, es sollte ohne den Link funktionieren. Es bedeutet, dass es mit dem Link wegen der Substitutionsnuancen nicht funktioniert.

Außerdem funktioniert es auch mit einer Referenz.

Wenn Sie Fragen zu solchen Dingen haben, ist es besser, mit einem Benchmark zu prüfen, z.B. C++. Die Syntax kann jedoch leicht unterschiedlich sein.

operator_fxsaber, C++ (gcc) - rextester
  • rextester.com
operator_fxsaber in C++ (gcc)
 
Комбинатор:

Ich habe mich geirrt, es sollte ohne den Link funktionieren. Es bedeutet, dass es mit dem Link wegen der Substitutionsnuancen nicht funktioniert.

Es funktioniert in den Pluspunkten und mit einem Link.

Wenn Sie Fragen zu solchen Dingen haben, ist es besser, mit einem Benchmark, z.B. C++, nachzusehen, auch wenn die Syntax etwas anders sein kann.

Ich danke Ihnen! Leider spreche ich keine anderen Sprachen als MQL. Ich habe auch ein schlechtes Verständnis von MMS. Ich lerne gerade OOP in MQL.

 

Zuerst dachte ich, dass ich überhaupt nicht rechnen kann.


Wie können diese beiden Zahlen 138,95 ergeben, und wie kann die Addition zweier Nullen -24,34 ergeben?

Aber dann wurde mir klar:

Wenn Positionen, die gestern oder früher eröffnet wurden, heute geschlossen werden, werden sie nicht angezeigt, aber sie nehmen an der Berechnung des Betrags der geschlossenen Positionen teil.

Wenn Sie die Tiefe des angezeigten Verlaufs ändern und dann erneut "Heute" wählen, werden alle verlorenen Positionen wieder an ihren Platz zurückgesetzt.


Wird dieser Fehler behoben werden? Oder braucht sie niemand?