OOP, templates et macros dans mql5, subtilités et utilisations - page 25

 

fxsaber:

Il est probable que certains compilateurs émettent des avertissements dans de telles situations.

Le spécificateur fait référence à une référence, et non à l'objet dans son ensemble, tout est légitime, pourquoi le compilateur devrait-il jurer ?

 
TheXpert:

le spécificateur se réfère à la référence, pas à l'objet dans son ensemble, tout est légitime, pourquoi le compilateur devrait-il jurer ?

Probablement, si c'était le cas, il n'y aurait pas de réprimande ici.

void g1( A& ) {}
void g2( const A& ) {}

void OnStart()
{
  const A a;
  
  g1(a); // 'a' - constant variable cannot be passed as reference
  g2(a); // OK
}
 
fxsaber:

Probablement, si c'était le cas, il n'y aurait pas de jurons ici.

Il s'agit d'un objet constant, il est donc logique qu'un objet constant ne puisse pas avoir de référence non constante.

 
TheXpert:

Il s'agit d'un objet constant, il est donc logique qu'un objet non constant ne puisse avoir une référence non constante.

Comment faire référence à un objet constant?

 
fxsaber:

Comment faire une référence à un objet constant?

void g1( A& ) {}
void g1(const A& ){}
void g2( const A& ) {}

void OnStart()
{
  const A a;
  
  g1(a);
  g2(a);
}

Ajoutez une surcharge.

 
Vladimir Simakov:

Surcharge à ajouter.

N'est-ce pas une surcharge sur un lien constant ?

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

OOP, modèles et macros dans mql5, trucs et astuces

TheXpert, 2020.02.26 15:24

Le spécificateur se réfère à la référence et non à l'objet dans son ensemble.

 
fxsaber:

Une telle surcharge n'est-elle pas une référence constante ?

Que voulez-vous faire ?

 
fxsaber:

Une telle surcharge n'est-elle pas une surcharge sur une référence constante ?

Si vous voulez que le compilateur se plante sur votre premier exemple, cela ne fonctionnera pas, car tout y est légal : vous ne changez pas l'instance de l'objet par référence, vous changez l'instance de l'objet pour lequel la méthode est appelée, et le fait qu'il puisse s'agir du même objet n'est pas le problème du compilateur, mais le casse-tête du programmeur.

Pour une classe, vous pouvez faire ce tour (pour une structure, vous ne pouvez pas) :

class A
{
  int i;
public:
  void f( const A &Value )  
  {
    Print(Value.i); // 0
    
    if (&this!=&Value) this.i = Value.i + 1;
    
    Print(Value.i); // 1
  }
};

void OnStart()
{
  A a;
  
  a.f(a);
}
 
Vladimir Simakov:

Si vous voulez que le compilateur se plante sur votre premier exemple, il ne le fera pas, car tout y est légal.

Il ne s'agit pas de légalité, mais du fait que le modificateur const ne garantit pas que l'objet restera inchangé.

 

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

OOP, modèles et macros dans mql5, trucs et astuces

fxsaber, 2020.02.25 22:23

Je n'ai jamais vu cette expression renvoyer un faux.
ORDER_TIME_DONE_MSC == DEAL_TIME_MSC

C'est pourquoi il est difficile de tenir des statistiques sur le temps d'exécution des ordres sur la base de l'historique des transactions.

Si nous pouvons toujours comparer la valeur deORDER_TIME_SETUP_MSC pour les ordres au marché, elle n'a aucun sens pour les ordres en attente.


Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Bibliothèques : MT4Orders

fxsaber, 2020.02.27 09:40

0 - 348806: 00:01:57.311
1 - 348530: 00:01:39.027
2 - 348494: 00:01:15.259
3 - 348406: 00:01:07.671
4 - 348950: 00:01:04.869
5 - 348960: 00:01:02.888
6 - 348814: 00:01:00.654
7 - 348392: 00:01:00.642
8 - 348508: 00:00:54.515
9 - 348550: 00:00:54.467


Jusqu'à deux minutes d'exécution sur un compte courant. Partagez vos statistiques ici. Le script n'utilise aucune bibliothèque, il est adapté à Netting/Hedging.