Erros, bugs, perguntas - página 2208

 

A famosa pergunta da entrevista de emprego.

O que estará no i ?

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

como parece funcionar em C++. Foi por isso que perguntei, decidi ler C++, por exemplo. O mesmo valor por um só na diferença. Parece atribuir 5 a "y" no segundo caso e depois adicioná-lo, enquanto no primeiro exemplo, primeiro adiciona e depois atribui (demorei muito tempo a perceber como funciona =D )

em mql5 são operações iguais, em c++ são diferentes, abaixo tem apenas um exemplo de um teste em c++ ))

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

A famosa pergunta da entrevista de emprego.

O que estará no i ?

MQL5 distribui 12. MS Visual Studio distribui 13.

Indefinido por causa do efeito secundário. Neste caso, um efeito triplo no seu conjunto. Optimizações diferentes podem calcular valores variáveis de forma diferente. Por uma questão de optimização.

 
Konstantin:

Em mql5 são operações equivalentes, em c++ são diferentes, abaixo foi-lhe apenas dado um exemplo de um teste em c++ ))

De onde o obteve? Comparou os resultados das operações array[++i]=i e array[i++]=i?

Aqui está um puzzle para si. Qual é a diferença entre a operação postfix e a operação prefixada?

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

Uma pergunta famosa numa entrevista de emprego.

Uma pergunta estúpida e desnecessária que revela apenas se o entrevistado sabe o que é a UB e tem pouco a ver com o tema de discussão.

Aleksey Rodionov:
Estou aqui sentado a pensar, como pode o código da forma de prefixo ser útil?

O compilador tem cérebros suficientes para optimizar a forma postfix quando necessário.

 
Slava:

Onde obteve a informação? Já comparou os resultados das operações array[++i]=i e array[i++]=i?

Aqui está uma pergunta intrigante. Qual é a diferença entre a operação postfix e a operação prefixada?

o que é que array[++i]=i e array[i++]=i tem a ver com isso, como posso comparar o que não tem estado na conversa...

Se houver algumas alterações no mql no âmbito do litígio e o senhor souber disso, então como moderador é obrigado a informar os participantes do diálogo, em vez de tentar fazer os testes de conhecimento de sintaxe, não é definitivamente o seu dever ...

e, além disso, mostrar todas as instruções em mql de ajuda sobre a diferença nas operações postfix e prefixos, mas os testes dos anos anteriores mostram que estas operações eram equivalentes em mql

ps. a propósito, acabei de verificar o exemplo do diálogo

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

construir 1816 resultado == 12

 
TheXpert:

Esta é uma pergunta estúpida e desnecessária, que revela apenas se o entrevistado sabe o que é a UB e tem pouco a ver com o tema da discussão.

Na verdade, o formulário do prefixo é mais rápido.

Além disso, acredito que a utilização de tais construções no seu código é simplesmente inaceitável.

Primeiro, devido à ambiguidade do trabalho em diferentes implementações e, mais ainda, porque é fácil cometer um erro em tal código e não tão fácil fazer sentido do mesmo.

O código deve ser transparente e compreensível num relance.

 
Georgiy Merts:

Além disso, na minha opinião, é simplesmente inaceitável a utilização de tais construções em código.

Em primeiro lugar, devido à ambiguidade do trabalho em diferentes implementações, e ainda mais - porque é fácil cometer um erro em tal código, e não é fácil de compreender.

O código deve ser transparente e compreensível num relance.

é tempo de mudar a ajuda mql5 para a forma de convenções e regras linguísticas

 
Aconselhar sobre fecho parcial de posição, tipo de conta RETAIL_HEDGING. Por exemplo, fecho metade de uma posição no Expert Advisor e uma nova encomenda com um lote mais pequeno deve abrir automaticamente. Então, em que altura é garantido que a nova encomenda está no terminal? Compreendo correctamente que não tem de aparecer imediatamente após o PositionClosePartial, e que tem de ser apanhado algures no OnTrade?
 
Konstantin:

O que é que array[++i]=i e array[i++]=i tem a ver com isso, como posso comparar o que não aconteceu na conversa...

Se houver uma mudança de mql no âmbito da disputa e souber disso, então como moderador é obrigado a levá-la aos participantes do diálogo, em vez de tentar conduzir testes de conhecimentos de sintaxe, não é definitivamente o seu dever...

e, além disso, mostrar todas as instruções em mql de ajuda sobre a diferença nas operações postfix e prefixos, mas os testes dos anos anteriores mostram que estas operações eram equivalentes em mql

ps. a propósito, acabei de verificar o exemplo do diálogo

construir 1816 resultado == 12

Mas os seus exemplos são puramente teóricos. Destinam-se apenas a estudantes. Nenhum programador no seu perfeito juízo os libertaria para a produção.

Postfix e prefixo de incremento e decremento são de facto utilizados em primeiro lugar em loops. E são chamados de incrementos e decretos!

Aqui estão alguns exemplos

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

и

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

Se reivindicar que as operações de prefixo e postfixação funcionam da mesma maneira, então faça uma bandeira nas suas mãos e um tambor no pescoço.

Em caso de incremento de prefixo, obterá um elemento de matriz nula não inicializado e um erro de matriz fora do intervalo na última iteração.


PS. Decidimos reler a nossa documentação sobre este assunto usando o link verde https://www.mql5.com/ru/docs/basis/operations/mathoperation

Nota importante

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

Poderá ter problemas de cálculo ao portar a expressão acima de um ambiente de programação para outro (por exemplo, de Borland C++ para MQL5). Em caso geral, a ordem dos cálculos depende da implementação do compilador. Na prática, existem duas formas de implementação de pós-aquisição (pós-incrementação):

  1. pós-aquisição (postincrement) é aplicada à variável depois de toda a expressão ser calculada;
  2. pós-aquisição (postincrement) é aplicada à variável imediatamente no local de operação.

Na MQL5, implementamos actualmente o primeiro método de cálculo da pós-aquisição (postincrement). Mas mesmo com este conhecimento, é melhor não experimentar a utilização deste truque.

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