Erreurs, bugs, questions - page 2466

 
A100:

Erreur logique

Quelle est la différence entre (1) et (2) ?

Il semble y avoir une erreur dans le 1er. Et le 2ème peut être contourné par j+0.

 
fxsaber:

Il semble y avoir une erreur dans le 1er. Et le 2ème peut être contourné par j+0.

Pourquoi avons-nous besoin d'une opération arithmétique supplémentaire alors que nous pouvons nous en passer ?

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

Pourquoi l'opération arithmétique supplémentaire ?

Il ne sera plus là après la compilation.

 
fxsaber:

Il ne sera plus là après la compilation.

Il le fera. C'est juste que dans le cas général, l'erreur de compilation se transforme en erreur d'exécution :

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
}

Résultat : 2:1

Et dans ma version : 2:2

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

Il le fera. C'est juste qu'en général, une erreur de compilation se transforme en une erreur d'exécution :

Résultat : 2:1

Le résultat est mélangé dans la source. Je ne pense pas qu'il y ait un ajout de temps d'exécution. C'est juste que le compilateur appelle la fonction int pour l'expression. Mais il ne calcule pas l'expression elle-même.

 

Je pensais implémenter un analogue d'itérateur pour le C++. Mais une tristesse s'installe....


Question pour les développeurs :
Parmi les opérateurs unaires autorisés dans MQL, lequel est suggéré comme meilleure pratique pour mettre en œuvre une opération de déréférencement ?

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

Parmi les opérateurs unaires autorisés dans MQL, lequel est suggéré comme meilleure pratique pour mettre en œuvre une opération de déréférencement ?

  • unaire +,-,++,--, !,~

Wow, il y a des gens ici sur ce forum qui pensent aux meilleures pratiques.

La chose la plus logique à faire est de se déplacer, à défaut de le faire. (désolé, cela nécessite un paramètre, puis l'ajout d'un paramètre rarement utilisé) Mais cela fonctionnera-t-il avec un seul paramètre ?

Au mieux, nous pouvons l'obtenir de cette façon :

(~w).F() ;

Vous devrez toujours le mettre entre parenthèses à cause de la priorité des points.

 
Sergey Dzyublik:

Question pour les développeurs :
Quelle surcharge d'opérateur unaire autorisée dans MQL est suggérée comme meilleure pratique pour mettre en œuvre une opération de déréférencement ?

  • unaire +,-,++,--, !,~

Qu'est-ce qui peut être déréférencé en MQL ? - même les pointeurs vers des objets sont déréférencés lorsqu'on y accède par le nom du pointeur

SZZY : J'aimerais que tu puisses canaliser ton énergie dans quelque chose d'utile..... Le mois dernier, pour la énième fois, j'ai essayé de faire une classe d'encapsulation pour un tableau à deux dimensions, je n'ai pas réussi à surcharger [] pour l'adresser comme un tableau normal à deux dimensions arr[1][2], et vous parlez de déréférencer des pointeurs dans MQL ...

 
Igor Makanu:

Je n'ai pas réussi à surcharger [] pour l'adresser comme un tableau bidimensionnel normal arr[1][2], et vous parlez de déréférencement de pointeur dans MQL...

cela arrive )))

 
Igor Makanu:

Pour la première fois, j'ai essayé de créer une classe enveloppante pour un tableau à deux dimensions, mais je n'ai pas pu surcharger [] pour le traiter comme un tableau normal à deux dimensions arr[1][2].

Ce problème a été résolu il y a 4 ou 5 ans, il existait une branche distincte avec des solutions toutes prêtes.
Peu de participants actifs ont survécu jusqu'à ce jour, la plupart d'entre eux ont été évincés...

P.s. Ce n'était pas un tableau à deux dimensions, mais un tableau à trois dimensions sur les classes.