Características da linguagem mql5, subtilezas e técnicas - página 211

 
fxsaber #:

O senhor mesmo comunicou o 4º erro. Porque é que a ZeroMemory é pior que {} ? Ou seja, temos algum mecanismo não autorizado de acesso a privado que não é detectado pelo compilador por alguma razão.

Está a considerar que os Desenvolvedores não o vão resolver? Em determinada altura, o compilador tambémnão reagiu àZeroMemory

 
A100 #:

O senhor mesmo comunicou o 4º erro. Porque é que a ZeroMemory é pior que {} ? Isto é, temos algum mecanismo não autorizado de acesso a privado que o compilador não pode detectar por alguma razão.

Não me parece que seja um erro. A estrutura não tem um construtor, mas está a ser inicializada. FileReadStruct - isso é uma coisa realmente assustadora...

 
fxsaber #:

Não vejo isto como um erro. A estrutura não tem construtor, é inicializada. FileReadStruct é então uma coisa bastante assustadora.

uint  FileReadStruct( 
   int          file_handle,        // handle файла 
   const void&  struct_object,      // структура, куда происходит считывание 
   int          size=-1             // размер структуры в байтах 
   );

A julgar pela descrição - é algum tipo de auto-engano

 
A100 #:

Pela descrição, parece ser algum tipo de auto-engano.

Bem, sim - é tudo engano.

 
A100 #:

A julgar pela descrição, isto é algum tipo de autodestruição

Referência a documentação sem considerar os artefactos de copiar-colar - estranho.

 
fxsaber #:

Ligações à documentação sem ter em conta os artefactos de copiar-colar - estranho.

Vejo esta função pela primeira vez - poderiam ter-me informado de que existe um erro na descrição

Existe um erro estrutural, para além da descrição:

struct X {
    X( int i ) : i( i ) {}
    const int i;
};
void OnStart()
{
    X x( 5 );
    FileReadStruct( 0, x, -1 ); //(1) нормально ???
    ZeroMemory( x );            //(2) Error: 'x' - not allowed for objects with protected members or inheritance
}

Porque é que a ZeroMemory é pior que FileReadStruct ?

Outra esperança de que os criadores não se apercebam disso, o adiem ou sejam demasiado preguiçosos para o corrigir (sublinhar o ponto)?

O meu argumento é simples: de uma vez a ZeroMemory compilou com tudo isto (incluindo privado ), mas eles notaram-no, apanharam-no e fixaram-no.

 
A100 #:

Esta é a primeira vez que vejo esta função - podiam ter-me dito que havia um erro na descrição.

Nunca olhei para a descrição desta função. Tudo é claro a partir do nome.

Para além da descrição, existe também um erro estrutural:

Não há erro no seguinte código.

struct MqlTick2 : private MqlTick {};

void OnStart()
{
  MqlTick2 Ticks[4] = {};

  uchar Bytes[];
  
  StructToCharArray(Ticks[0], Bytes);
  CharArrayToStruct(Ticks[1], Bytes);

  FileReadStruct(0, Ticks[0]);
  FileWriteStruct(0, Ticks[1]);
  
  FileWriteArray(0, Ticks);
  FileReadArray(0, Ticks);
}

O tédio não conquistará a conveniência!


Porque é que a ZeroMemory é pior que FileReadStruct ?

Gosta de se referir à documentação. Diz aí tudo sobre as limitações da ZeroMemory. Mas não diz nada sobre as limitações do ficheiro*. Quanto ao ZeroMemory, julgo pelo que tenho. Não é conveniente agora, mas parece ter sido feito de propósito.

Mas se comparar estas duas funções, FileReadStruct funciona apenas com estruturas simples. Esta é uma diferença fundamental.


Este assunto é sobre as peculiaridades da MQL5. Eu apontei para um (não funciona em MQL4). Este diálogo é, infelizmente, uma perda de tempo

 
fxsaber #:

Não há erros no seguinte código.

Gosta de se referir à documentação. Diz aí tudo sobre as limitações da ZeroMemory. Mas não diz nada sobre as limitações do File*. Quanto à ZeroMemory, confio no que tenho. Não é conveniente agora, mas parece ter sido feito de propósito.

Se comparar estas duas funções, FileReadStruct funciona apenas com estruturas simples. Esta é uma diferença fundamental em princípio.

Existe um erro (o compilador simplesmente não nos informa sobre ele no momento) e é o seguinte: alguma função (nomeadamente, FileReadStruct) externa à classe tem acesso directo aos membros protegidos desta classe, o que contradiz o próprio conceito de privado, protegido.

E como é esta função melhor do que aZeroMemory e centenas de outras funções? Nada! - Os Desenvolvedores ainda não chegaram ao fim do processo. AZeroMemory também não tinha limitações especificadas na documentação antes.Mas está lá agora - e não porque lhe cause alguns inconvenientes - mas porque um único princípio funciona - ouFileReadStruct ouZeroMemory, ou centenas de outras funções semelhantes - todas são iguais.

 
A100 #:

que uma centena de outras funções semelhantes são todas iguais

FileLoad/FileSave para a caixa da desigualdade.

A comodidade não vai ganhar!

Não há razão para se atirar no pé.

 
fxsaber #:

FileLoad/FileSave mais para a caixa da desigualdade.

Não há razão para se atirar no pé.

É você que está a disparar no pé - declarando-se privado. Tem um acesso limitado a si próprio e depois perguntar-se-á porque é que o código onde o acesso público é necessário para funções externas deixou subitamente de funcionar