Errori, bug, domande - pagina 2208

 

La famosa domanda del colloquio di lavoro.

Cosa ci sarà nella i?

int i = 5;
i = i++ + ++i;
Uscite MQL5 12. Uscite MS Visual Studio 13.
 
Aleksey Rodionov:

come sembra funzionare in C++. Ecco perché ho chiesto, ho deciso di leggere C++ per esempio. Stesso valore di uno solo nella differenza. Sembra assegnare 5 a "y" nel secondo caso e poi aggiungerlo, mentre nel primo esempio prima aggiunge e poi assegna (mi ci è voluto molto tempo per capire come funziona =D )

In mql5 sono operazioni uguali, in c++ sono diverse, sotto hai solo un esempio di un test su c++ ))

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

La famosa domanda del colloquio di lavoro.

Cosa ci sarà nella i?

MQL5 dà 12. MS Visual Studio dà 13.

Non definito a causa dell'effetto collaterale. In questo caso, un triplo effetto complessivo. Diverse ottimizzazioni possono calcolare i valori delle variabili in modo diverso. Per il bene dell'ottimizzazione.

 
Konstantin:

In mql5 sono operazioni equivalenti, in c++ sono diverse, sotto ti è stato dato solo un esempio di test su c++ ))

Da dove l'hai preso? Hai confrontato i risultati delle operazioni array[++i]=i e array[i++]=i?

Ecco un puzzle per voi. Qual è la differenza tra l'operazione postfix e l'operazione prefix?

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

Una famosa domanda in un colloquio di lavoro.

Una domanda stupida e inutile che rivela solo se l'intervistato sa cosa sia UB e ha poco a che fare con l'argomento della discussione.

Aleksey Rodionov:
Sono seduto qui a pensare: come può essere utile il codice di forma del prefisso?

Il compilatore ha abbastanza cervello per ottimizzare la forma postfix quando necessario.

 
Slava:

Da dove avete preso l'input? Avete confrontato i risultati delle operazioni array[++i]=i e array[i++]=i?

Ecco una domanda sconcertante. Qual è la differenza tra l'operazione postfix e l'operazione prefix?

cosa c'entra array[++i]=i e array[i++]=i, come posso confrontare ciò che non è stato nella conversazione...

Se ci sono dei cambiamenti in mql nell'ambito di questa disputa e tu ne sei a conoscenza, allora tu come moderatore hai l'obbligo di informare i partecipanti a questo dialogo, invece di cercare di fare i test di conoscenza della sintassi, non è assolutamente tuo dovere...

e inoltre, mostrare tutte le istruzioni nell'aiuto di mql sulla differenza nelle operazioni postfix e prefix, ma i test degli anni precedenti mostrano che queste operazioni erano equivalenti in mql

ps. a proposito, ho appena controllato l'esempio del dialogo

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

costruire 1816 risultato == 12

 
TheXpert:

Questa è una domanda stupida e inutile, che rivela solo se l'intervistato sa cosa sia UB e ha poco a che fare con l'argomento della discussione.

Beh, in realtà la forma del prefisso è più veloce.

Inoltre, credo che usare tali costrutti nel vostro codice sia semplicemente inaccettabile.

In primo luogo, a causa dell'ambiguità del lavoro in diverse implementazioni e, ancora di più, perché è facile fare un errore in tale codice e non così facile dargli un senso.

Il codice dovrebbe essere trasparente e comprensibile a colpo d'occhio.

 
Georgiy Merts:

Inoltre, a mio parere, è semplicemente inaccettabile usare tali costrutti nel codice.

In primo luogo, a causa dell'ambiguità del lavoro su diverse implementazioni, e ancora di più - perché è facile fare un errore in tale codice, e non è facile da capire.

Il codice dovrebbe essere trasparente e comprensibile a colpo d'occhio.

è ora di cambiare l'aiuto di mql5 in forma di convenzioni e regole del linguaggio

 
Si prega di consigliare la chiusura parziale della posizione, tipo di conto RETAIL_HEDGING. Per esempio, chiudo metà di una posizione in Expert Advisor e un nuovo ordine con un lotto più piccolo dovrebbe aprirsi automaticamente. Quindi, a che punto il nuovo ordine è garantito nel terminale? Ho capito bene che non deve apparire immediatamente dopo il PositionClosePartial, e deve essere catturato da qualche parte in OnTrade?
 
Konstantin:

Cosa c'entra array[++i]=i e array[i++]=i, come posso confrontare ciò che non è successo nella conversazione...

Se ci sono dei cambiamenti in mql nell'ambito della controversia e tu ne sei a conoscenza, allora come moderatore hai l'obbligo di portarlo ai partecipanti al dialogo, invece di cercare di condurre test di conoscenza della sintassi, non è assolutamente tuo dovere...

e inoltre, mostra tutte le istruzioni nell'aiuto di mql sulla differenza nelle operazioni postfix e prefix, ma i test degli anni precedenti mostrano che queste operazioni erano equivalenti in mql

ps. a proposito, ho appena controllato l'esempio del dialogo

costruire 1816 risultato == 12

Ma i suoi esempi sono puramente teorici. Sono destinati solo agli studenti. Nessun programmatore sano di mente li metterebbe in produzione.

L'incremento e il decremento dei prefissi e dei postfissi sono in realtà utilizzati prima di tutto nei cicli. E si chiamano incrementi e decrementi!

Ecco alcuni esempi

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

и

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

Se sostenete che le operazioni di prefisso e postfisso funzionano allo stesso modo, allora bandiera in mano e tamburo sul collo.

In caso di incremento del prefisso, otterrete un elemento di array nullo non inizializzato e un errore di array fuori portata all'ultima iterazione.


PS. Ho deciso di rileggere la nostra documentazione su questo argomento nel link verde https://www.mql5.com/ru/docs/basis/operations/mathoperation

Nota importante

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

Si possono avere problemi di calcolo quando si porta l'espressione di cui sopra da un ambiente di programmazione a un altro (per esempio, da Borland C++ a MQL5). In generale, l'ordine dei calcoli dipende dall'implementazione del compilatore. In pratica, ci sono due modi di implementare il postdecremento (postincremento):

  1. postdecremento (postincremento) viene applicato alla variabile dopo che l'intera espressione è stata calcolata;
  2. postdecremento (postincremento) viene applicato alla variabile immediatamente nel luogo dell'operazione.

In MQL5 attualmente implementiamo il primo metodo di calcolo del postdecremento (postincremento). Ma anche con questa conoscenza, è meglio non sperimentare l'uso di questo trucco.

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