MQL5 O compilador não faz distinção entre uma classe e um ponteiro para ela - página 3
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Bingo!
Não é bem um bingo. Para a atribuição de objetos simples com operador = funciona. Não é um bug, com certeza.
...
Não. Quando não está atribuindo um ponteiro ao automático, está copiando um objeto - os valores de seus campos, mas somente com objetos simples.
Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos
O Compilador MQL5 não faz distinção entre uma classe e um ponteiro
SemenTalonov, 2019.01.10 04:18
Desde quando eles são definidos (pergunta aos desenvolvedores)
E como eles funcionam? O seguinte código compilado parece ilusório
E aqui a situação não é clara
Não é exatamente um bingo. Para objetos simples, a atribuição com operador = funciona. Não é um bug, com certeza.
Isso mesmo, esse é o ponto mais importante.
Pessoalmente, acredito que não se pode usar um operador de atribuição para objetos se este operador não estiver explicitamente definido, mesmo que os objetos sejam simples. Ainda podemos, de alguma forma, concordar sobre a atribuição de estruturas simples. Mas as classes nas quais o construtor é necessariamente chamado (pelo menos implicitamente) - só podem ser atribuídas por operadores explicitamente definidos.
Na minha opinião, isto foi feito para facilitar a vida dos novatos.
É isso mesmo, esse é o ponto principal.
Pessoalmente, acredito que não se pode usar um operador de atribuição para objetos se esse operador não estiver explicitamente definido, mesmo que os objetos sejam simples. Podemos, de alguma forma, concordar com a atribuição de estruturas simples. Mas as classes onde o construtor é necessariamente chamado (pelo menos, implicitamente) - só podem ser atribuídas com operadores explicitamente definidos.
Na minha opinião, isto foi feito para facilitar a vida dos iniciantes.
E os complexos são convenientes - sem ele não é possível devolver o MqlTradeRequest, por exemplo. E nas estruturas, um construtor também é necessariamente chamado de construtor.
Há uma teoria de que a MQL é um C# muito despojado. Portanto, é compreensível como o compilador MQL se comporta neste caso. Afinal, as classes em C# são sempre colocadas na pilha, portanto:
Agora vamos lidar com a matriz m_A. Como m_A é uma matriz de classes e as classes são sempre colocadas na pilha, não há necessidade de especificar se a matriz m_A é uma matriz de ponteiros ou uma matriz dos próprios objetos, porque apenas a primeira variante sempre funciona para as classes. Como o m_A é sempre um conjunto de indicadores, a MQL não precisa especificar se armazena tipos de referência ou tipos significativos. Portanto, A* m_A[2] == A m_A[2]. Amém.
Há uma teoria de que a MQL é um C# muito despojado. Portanto, é compreensível como o compilador MQL se comporta neste caso. Afinal, as aulas em C# são sempre colocadas na pilha, portanto:
Agora vamos lidar com a matriz m_A. Como m_A é uma matriz de classes e as classes são sempre colocadas na pilha, não há necessidade de especificar se a matriz m_A é uma matriz de ponteiros ou uma matriz dos próprios objetos, porque apenas a primeira variante sempre funciona para as classes. Como o m_A é sempre um conjunto de indicadores, a MQL não precisa especificar se armazena tipos de referência ou tipos significativos. Portanto, A* m_A[2] == A m_A[2]. Amém.
Conclusão incorreta. m_A é um conjunto de objetos, não de ponteiros. E estes objetos são completamente destruídos. Não é o novo A que é destruído.
Saída incorreta. m_A é um conjunto de objetos, não de ponteiros. E estes objetos são completamente destruídos. Não é o novo A que é destruído.
Esse é um bom exemplo. Bem, passemos então a pensar sobre isso.
Pfft)) Estou chocado com isto.
Phew)) Estou realmente chocado com isto.
O que há de errado com isso? Num caso, um objeto, no outro, um ponteiro.