Erreurs, bugs, questions - page 2208

 
Aleksey Rodionov:

comme cela semble fonctionner en C++. C'est pourquoi j'ai demandé, décidé de lire C++ par exemple. Même valeur par une seule différence. Il semble qu'il assigne 5 à "y" dans le second cas et l'ajoute ensuite, alors que dans le premier exemple, il ajoute d'abord et assigne ensuite (il m'a fallu beaucoup de temps pour comprendre comment cela fonctionne =D ).

En mql5 ce sont des opérations égales, en c++ elles sont différentes, ci-dessous vous avez juste un exemple d'un test sur c++ ;))

 
. ... Rick D. ... .:

La fameuse question de l'entretien d'embauche.

Qu'y aura-t-il dans le i ?

MQL5 donne 12. MS Visual Studio donne 13.

Non défini en raison de l'effet secondaire. Dans ce cas, il s'agit d'un triple effet. Des optimisations différentes peuvent calculer les valeurs des variables différemment. Dans un souci d'optimisation.

 
Konstantin:

En mql5 ce sont des opérations équivalentes, en c++ elles sont différentes, ci-dessous on vous a donné juste un exemple d'un test c++))

Où l'avez-vous trouvé ? Avez-vous comparé les résultats des opérations array[++i]=i et array[i++]=i ?

Voici un puzzle pour vous. Quelle est la différence entre l'opération postfixe et l'opération préfixe ?

 
. ... Rick D. ... .:

Une question célèbre lors d'un entretien d'embauche.

Une question stupide et inutile qui ne fait que révéler si la personne interrogée sait ce qu'est l'UB et n'a pas grand-chose à voir avec le sujet de la discussion.

Aleksey Rodionov:
Je suis assis là à penser, comment le code de la forme préfixe peut être utile ?

Le compilateur a suffisamment de cervelle pour optimiser la forme postfixe lorsque cela est nécessaire.

 
Slava:

D'où vient l'information ? Avez-vous comparé les résultats des opérations array[++i]=i et array[i++]=i?

Voici une question déroutante. Quelle est la différence entre l'opération postfixe et l'opération préfixe ?

quel est le rapport entre array[++i]=i et array[i++]=i, comment puis-je comparer ce qui n'a pas été dit dans la conversation...

S'il y a des changements dans mql dans le cadre de cette dispute et que vous le savez, alors vous êtes obligé en tant que modérateur d'informer les participants de ce dialogue, au lieu d'essayer de faire les tests de connaissance de la syntaxe, ce n'est certainement pas votre devoir ....

et de plus, montrer toutes les instructions dans l'aide mql sur la différence dans les opérations postfix et prefix, mais les tests des années précédentes montrent que ces opérations étaient équivalentes dans mql

ps. au fait, je viens de vérifier l'exemple de la boîte de dialogue

int i = 5;
i = i++ + ++i;

construire 1816 résultat == 12

 
TheXpert:

Il s'agit d'une question stupide et inutile, qui révèle uniquement si la personne interrogée sait ce qu'est l'UB et qui n'a pas grand-chose à voir avec le sujet de la discussion.

En fait, la forme préfixe est plus rapide.

De plus, je pense que l'utilisation de telles constructions dans votre code est tout simplement inacceptable.

Tout d'abord, en raison de l'ambiguïté du travail dans les différentes implémentations et, plus encore, parce qu'il est facile de faire une erreur dans un tel code et pas si facile d'en comprendre le sens.

Le code doit être transparent et compréhensible au premier coup d'œil.

 
Georgiy Merts:

De plus, à mon avis, il est tout simplement inacceptable d'utiliser de telles constructions dans le code.

Tout d'abord, en raison de l'ambiguïté du travail sur les différentes implémentations, et plus encore - parce qu'il est facile de faire une erreur dans un tel code, et pas facile à comprendre.

Le code doit être transparent et compréhensible au premier coup d'œil.

il est temps de changer l'aide mql5 sous la forme de conventions et de règles de langage

 
Veuillez me conseiller sur la fermeture partielle de la position, type de compte RETAIL_HEDGING. Par exemple, je ferme la moitié d'une position dans Expert Advisor et un nouvel ordre avec un lot plus petit devrait s'ouvrir automatiquement. Donc, à quel moment le nouvel ordre est garanti dans le terminal ? Ai-je bien compris qu'il ne doit pas apparaître immédiatement après la PositionClosePartial, et qu'il doit être pris quelque part dans OnTrade ?
 
Konstantin:

Quel est le rapport entre array[++i]=i et array[i++]=i, comment puis-je comparer ce qui ne s'est pas passé dans la conversation...

S'il y a des changements dans mql dans le cadre de la dispute et que vous le savez, alors en tant que modérateur vous êtes obligé de l'apporter aux participants du dialogue, au lieu d'essayer de faire des tests de connaissances syntaxiques, ce n'est définitivement pas votre devoir....

et de plus, montrer toutes les instructions dans l'aide mql sur la différence dans les opérations postfix et prefix, mais les tests des années précédentes montrent que ces opérations étaient équivalentes dans mql

ps. au fait, je viens de vérifier l'exemple de la boîte de dialogue

construire 1816 résultat == 12

Mais vos exemples sont purement théoriques. Ils sont destinés uniquement aux étudiants. Aucun programmeur sain d'esprit ne les mettrait en production.

L'incrémentation et la décrémentation postfixe et préfixe sont en fait utilisées en premier lieu dans les boucles. Et ils sont appelés incréments et décréments !

Voici quelques exemples

int i=0;
while(i<ArraySize(array))
   array[i++]=i;

и

int i=0;
while(i<ArraySize(array))
   array[++i]=i;

Si vous prétendez que les opérations préfixes et postfixes fonctionnent de la même manière, alors drapeau dans les mains et tambour sur le cou.

Dans le cas d'un incrément préfixe, vous obtiendrez un élément de tableau nul non initialisé et une erreur de type "array out of range" à la dernière itération.


PS. J'ai décidé de relire notre documentation sur ce sujet en lien vert https://www.mql5.com/ru/docs/basis/operations/mathoperation.

Remarque importante

int i=5 ;
int k = i++ + ++i ;

Vous pouvez rencontrer des problèmes de calcul lorsque vous transférez l'expression ci-dessus d'un environnement de programmation à un autre (par exemple, de Borland C++ à MQL5). Dans le cas général, l'ordre des calculs dépend de l'implémentation du compilateur. En pratique, il existe deux façons de mettre en œuvre la postdécrémentation (postincrémentation) :

  1. postdécrémentation (postincrémentation) est appliquée à la variable après le calcul de l'expression entière ;
  2. La postdécrémentation (postincrémentation) est appliquée à la variable immédiatement à l'endroit de l'opération.

Dans MQL5, nous mettons actuellement en œuvre la première méthode de calcul de la postdécrémentation (postincrémentation). Mais même avec cette connaissance, il est préférable de ne pas expérimenter cette astuce.

Документация по MQL5: Основы языка / Операции и выражения / Арифметические операции
Документация по MQL5: Основы языка / Операции и выражения / Арифметические операции
  • www.mql5.com
Операция инкремента и декремента применяются только к переменным, к константам не применяются. Префиксныe инкремент (++i) и декремент (--k) применяются к переменной непосредственно перед использованием этой переменной в выражении. Могут возникнуть вычислительные проблемы при переносе вышеуказанного выражения из одной среды программирования в...
 
Slava:

Et parce que vos exemples sont purement théoriques. Ils sont purement destinés aux étudiants. Aucun programmeur sain d'esprit ne mettrait de telles choses en production.

L'incrémentation et la décrémentation des préfixes et des préfixes sont vraiment utilisées avant tout dans les boucles. Et on les appelle des incréments et des décréments !

Voici quelques exemples

и

Si vous prétendez que les opérations préfixes et postfixes fonctionnent de la même manière, alors drapeau dans la main et tambour sur le cou.

Dans le cas d'un incrément préfixe, vous obtiendrez un élément de tableau nul non initialisé et une erreur de type "array out of range" à la dernière itération.

Peut-être que votre esprit supérieur ne comprend pas, je vais répéter ma question une fois de plus.

а при чем тут array[++i]=i и array[i++]=i, как я могу сравнить то, чего не было в беседе...

La partie surlignée est-elle difficile à voir pour vous ?

Venons-en maintenant au fait, pourquoi dans l'exemple qui apparaît dans la conversation, le résultat en mql == 12 et peu importe qu'il ait été fait à la main ou non, s'il y a une différence dans les opérations postfixe et préfixe, le résultat devrait être == 13

ps. et je ne fais pas une déclaration, parce que maintenant j'ai vérifié et vraiment postfix et prefix ont maintenant une différence, mais ma question ci-dessus donne une raison de croire que les ambiguïtés dans le langage au moment de la compilation apparemment assez et avant de se jeter sur quelqu'un dans la branche, traiter ces UB, nous ne sommes pas en faute ici.

Au fait, je vois que l'aide a déjà été bricolée ;))