Errori, bug, domande - pagina 2200

 

Cosa significa questo?

2018.04.24 14:02:21.721 Books   invalid book item[Si-6.18,buy,61996.00000,-50]
 
fxsaber:
Perché lo script non produce nulla?
perché è un trasferimento di puntatore e non un trasferimento di valore
 
Комбинатор:
perché è per riferimento e non per valore

Non lo capisco affatto. Ecco il codice

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

In qualche modo si lamenta di passare un puntatore per riferimento. Allo stesso tempo, la funzione f riceve tranquillamente il puntatore per riferimento.


Il risultato è

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

L'operatore int è stato chiamato senza problemi, mentre l'operatore pointer no.

 
Logicamente, non dovrebbe funzionare nemmeno senza un riferimento (imho). questa potrebbe essere una caratteristica dei puntatori mql - che non hanno bisogno di essere dereferenziati
 
Комбинатор:
Logicamente non dovrebbe funzionare senza riferimento (imho). Potrebbe essere una caratteristica dei puntatori mql - non hanno bisogno di essere dereferenziati.

Una richiesta a tutti coloro che capiscono l'argomento, scopriamolo. In questo momento è un po' un casino.

Ero solito pensare che un operatore fosse solo uno dei metodi che era comodo da usare a causa della sua sintassi. E nessun'altra distinzione. Ora si scopre che non è sempre così.

 
fxsaber:

Pensavo che un operatore fosse solo uno dei metodi

qualsiasi operatore sì. ma

1. operatore = uno dei più popolari

2. l'unico operatore che viene generato dal compilatore

 
Комбинатор:

qualsiasi operatore sì. ma

1. operatore = uno dei più richiesti

2. l'unico operatore che viene generato dal compilatore

Quindi operatore sovraccaricato/sovrascritto.

 

Mi sono sbagliato, dovrebbe funzionare senza il link. significa che non funziona con il link a causa delle sfumature di sostituzione.

In più, funziona anche con un riferimento.

Se avete domande su queste cose, è meglio controllare con un punto di riferimento, cioè C++. tuttavia, la sintassi può essere leggermente diversa

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

Mi sono sbagliato, dovrebbe funzionare senza il link. significa che non funziona con il link a causa delle sfumature di sostituzione.

Funziona nei plus e con un link.

Se avete domande su queste cose è meglio controllare con un punto di riferimento, ad esempio C++. anche se la sintassi può essere leggermente diversa

Grazie! Sfortunatamente, non parlo altre lingue oltre a MQL. Ho anche una scarsa comprensione di MQL. Sto imparando l'OOP in MQL.

 

All'inizio pensavo di non conoscere affatto l'aritmetica.


Come possono questi due numeri arrivare a 138,95 e come possono aggiungere due zeri fino a -24,34?

Ma poi ho capito:

Se le posizioni aperte ieri o prima sono chiuse oggi, non vengono visualizzate, ma partecipano al calcolo dell'importo delle posizioni chiuse.

Se cambiate la profondità della storia visualizzata e poi selezionate di nuovo "Oggi", tutte le posizioni perse torneranno al loro posto.


Questo bug sarà risolto? O nessuno ne ha bisogno?