Bogue de compilation avec le paramètre template = void* - page 4

 
Dmitry Fedoseev:

Avez-vous essayé de lire le lien que vous nous avez donné ? Slava y explique populairement pourquoi il en est ainsi - parce que la priorité a été mélangée dans l'ancienne MQL4. Il est donc maintenant important d'attirer l'attention. Ce n'est même pas bien qu'il n'y ait qu'un avertissement, ce serait mieux s'il y avait une erreur.

Ou, une claque dans le visage

 
Dmitry Fedoseev:

Avez-vous essayé de lire le lien que vous nous avez donné ? Slava y explique populairement pourquoi il en est ainsi - parce que la priorité a été mélangée dans l'ancienne MQL4. Il est donc maintenant important d'attirer l'attention. Ce n'est même pas bien qu'il n'y ait qu'un avertissement, ce serait mieux s'il y avait une erreur.

Et alors ? Ici :

int i = 1 << 2 + 3;

De plus, dans MQL4, la priorité a été mélangée ? Il s'agit de l'approche générale, pas du cas particulier. Dans le cas particulier vous pouvez donner un avertissement/erreur (comme une exception) mais pourquoi cela devrait-il être étendu à tout le reste ?

De plus, dans MQL4 (pour autant que je sache), disons que l'opérateur || n'a pas de paresse. Et malgré cela, le compilateur MQL5 ne génère pas d'avertissement dans des cas similaires (il ne suggère pas de décomposer || en plusieurs opérations atomiques)

Il s'ensuit que la page correspondante de l'histoire est inversée.

 

Je voudrais ajouter à ... que même la Documentation dit :

"Pour modifier l'ordre des opérations, on utilise des parenthèses, qui ont la plus haute priorité".

ce qui implique que l'utilisation des parenthèses à d'autres fins (non liées à la modification de l'ordre) doit encore être justifiée

 
fxsaber:

Je me demande où se situe le seuil du nombre de programmeurs à partir duquel il faut hésiter ? 5 n'est pas suffisant. 1 000 n'est pas suffisant. 10.000 - hésitez. Et enfin N - confiance. Cependant, quand il s'agissait de (N-1) - je ne lui faisais pas encore confiance.

Le seuil n'est pas défini en valeur absolue, mais en % du nombre de personnes qui pensent autrement. La majorité peut avoir tort, mais pas 99% est un critère fiable.

 
A100:
Et en 1961x32 tout fonctionne... yay !

Hmm, fonctionnalité intéressante. Dorénavant, je spécifierai également le débit binaire de la plate-forme.

 
A100:

Et alors ? Ici :

int i = 1 << 2 + 3;

également dans MQL4 la priorité a été mélangée ?

Oui, la documentation indique que la priorité était différente dans l'ancienne version.

Mais à mon avis, tout cela n'est plus d'actualité depuis longtemps. Et ce d'autant plus si la directive stricte est spécifiée. Et si quelqu'un déterre un ancien code et essaie de le compiler, il devra de toute façon refaire beaucoup de choses. Ces avertissements sont donc une relique du passé. C'est pourquoi je suis d'accord pour dire qu'il ne faut pas lancer des avertissements dans le vide.

 
Désolé, si vous le savez, y a-t-il un moyen de récupérer un int à partir de void*ptr en mql autre que (int)StringFormat("%i",ptr) ?
 
A100:

Ainsi, dans votre code, les parenthèses ne signifient rien, la déclaration ... semble illogique et dans le cas des parenthèses nous devons comprendre si les priorités/ordre ont réellement changé, alors que dans mon code les parenthèses en elles-mêmes signifient le changement des priorités/ordre (la présence/absence de parenthèses rend tout clair)

parenthèses
fxsaber
A100
il y a
incompréhensible
les priorités des opérations sont inversées
pas de
les priorités opérationnelles n'ont pas été modifiées
les priorités des opérations n'ont pas été modifiées

Les parenthèses rendent une expression totalement dépourvue d'ambiguïté.

Les avertissements eux-mêmes (et pas seulement ceux concernant les parenthèses) ne nous informent pas d'une erreur, mais de la possibilité d'une erreur. Mais vous proposez de vous débarrasser complètement de tous les avertissements, car les priorités (pas seulement avec des parenthèses) sont clairement spécifiées dans le compilateur.

A100:

Le seuil n'est pas défini en valeur absolue, mais comme un rapport en % du nombre de ceux qui pensent autrement. La plupart d'entre eux peuvent se tromper, mais pas 99% est un critère fiable.

La même question sur le nombre non pas en absolu, mais en relatif. 98 % est-il un critère fiable ? А 97% ? Où se situe le seuil à partir duquel il faut commencer à douter de la fiabilité ? Même si 100% des gens autour de vous prétendent que vous êtes un maniaque meurtrier. Est-ce un critère crédible ?

 
Ilya Malev:
Désolé d'être hors sujet, pouvez-vous me dire si quelqu'un le sait : existe-t-il un moyen en mql de récupérer un int à partir de void*ptr autre que (int)StringFormat("%i",ptr) ?

uniquement via les chaînes de caractères, j'avais l'habitude d'obtenir l'adresse du pointeur viaStringConcatenate(), comme ceci :

Cinteger *x = new Cinteger();
   string s;
   int zz=StringConcatenate(s,"*x = ",x);
   Print("OK ",s);
 
Alexey Navoykov:

L'exemple le plus trivial est la classe array, qui sert dans ce cas à stocker des pointeurs :

Un tel tableau est d'une utilité douteuse, franchement. Que pouvez-vous en faire ? Vous savez que vous n'appellerez pas automatiquement la suppression pour les membres du tableau, n'est-ce pas ?