Bug del compilatore con il parametro template = void* - pagina 4

 
Dmitry Fedoseev:

Hai provato a leggere il link che ci hai dato? Slava spiega popolarmente perché è così - perché la priorità era confusa nel vecchio MQL4. Quindi ora è importante attirare l'attenzione. Non è nemmeno buono che ci sia solo un avvertimento, sarebbe meglio se ci fosse un errore.

Oppure, uno schiaffo in faccia

 
Dmitry Fedoseev:

Hai provato a leggere il link che ci hai dato? Slava spiega popolarmente perché è così - perché la priorità era confusa nel vecchio MQL4. Quindi ora è importante attirare l'attenzione. Non è nemmeno buono che ci sia solo un avvertimento, sarebbe meglio se ci fosse un errore.

Quindi? Qui:

int i = 1 << 2 + 3;

Anche in MQL4 la priorità era confusa? Si tratta dell'approccio generale, non del caso speciale. Nel caso particolare si può dare un avvertimento/errore (come eccezione) ma perché dovrebbe essere esteso a tutto il resto?

Inoltre, in MQL4 (per quanto ne so) diciamo che l'operatore || non ha pigrizia. E nonostante questo, il compilatore MQL5 non genera un avviso in casi simili (non suggerisce di rompere || in diverse operazioni atomiche)

Da ciò deriva che la pagina corrispondente della storia è invertita

 

Vorrei aggiungere a ... che anche la Documentazione dice:

"Per cambiare l'ordine delle operazioni, si usano le parentesi, che hanno la massima priorità".

il che implica che l'uso delle parentesi per altri scopi (non legati al cambiamento dell'ordine) deve ancora essere giustificato

 
fxsaber:

Mi chiedo dove sia la soglia del numero di programmatori quando si dovrebbe esitare? 5 non è sufficiente. 1.000 non sono sufficienti. 10.000 - esitare. E poi finalmente N - fiducia. Tuttavia, quando era (N-1) - non mi fidavo ancora.

La soglia non è definita in valore assoluto, ma come % del numero che la pensa diversamente. La maggioranza può sbagliare, ma non il 99% è un criterio affidabile

 
A100:
E nel 1961x32 tutto funziona... Evviva!

Hmm, caratteristica interessante. D'ora in poi specificherò anche il bitrate della piattaforma

 
A100:

Quindi? Qui:

int i = 1 << 2 + 3;

anche in MQL4 la priorità era confusa?

Sì, la documentazione dice che la priorità era diversa nella vecchia versione.

Ma secondo me, tutto questo è diventato da tempo irrilevante. E tanto più se viene specificata la direttiva strict. E se qualcuno dissotterra il codice antico e cerca di compilarlo, dovrà comunque rifare un sacco di cose. Quindi questi avvertimenti sono una reliquia del passato. Per questo sono d'accordo che non si dovrebbero buttare avvertimenti nel vuoto.

 
Scusa, se lo sai, c'è un modo per ottenere int da void*ptr in mql diverso da (int)StringFormat("%i",ptr)?
 
A100:

Quindi nel tuo codice le parentesi non significano nulla, la dichiarazione ... sembra illogico e nel caso delle parentesi bisogna capire se le priorità/ordine sono effettivamente cambiate, mentre nel mio codice le parentesi da sole significano cambiare priorità/ordine (la presenza/assenza di parentesi rende tutto chiaro)

staffe
fxsaber
A100
c'è
incomprensibile
le priorità delle operazioni sono invertite
no
le priorità delle operazioni non sono state modificate
le priorità delle operazioni non sono state modificate

Le parentesi rendono un'espressione completamente univoca.

Gli avvertimenti stessi (non solo sulle parentesi) non ci dicono di un errore, ma della possibilità di un errore. Ma tu proponi di sbarazzarti completamente di tutti gli avvertimenti, perché le priorità (non solo con le parentesi) sono chiaramente specificate nel compilatore.

A100:

La soglia non è definita in valore assoluto, ma come rapporto % del numero di coloro che la pensano diversamente. La maggior parte può essere sbagliata, ma non il 99% è un criterio affidabile

La stessa domanda sul numero non in assoluto, ma in relativo. Il 98% è un criterio affidabile? А 97%? Dov'è la soglia in cui bisogna iniziare a dubitare dell'affidabilità? Anche se il 100% delle persone intorno a te sostiene che sei un maniaco omicida. È un criterio credibile?

 
Ilya Malev:
Scusate l'off-topic, potete dirmi se qualcuno lo sa: c'è un modo in mql per ottenere int da void*ptr diverso da (int)StringFormat("%i",ptr)?

solo attraverso le stringhe, ho usato per ottenere l'indirizzo del puntatore tramiteStringConcatenate(), come questo:

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

L'esempio più banale è la classe array, che in questo caso viene utilizzata per memorizzare qualsiasi puntatore:

Un tale schieramento è di dubbia utilità, francamente parlando. Cosa ci si può fare? Sapete che non chiamerete automaticamente la cancellazione per i membri dell'array, vero?