Aprender e escrever juntos em MQL5 - página 32

 

Não sei :) no nosso escritório para códigos escritos como

std::string s = "";

no mínimo, eles serão repreendidos, e com razão, imho.

Mais uma vez, este é um tipo complexo que requer uma inicialização correcta na criação, se a corda precisa de ser inicializada - é um bug de MT5(4), com certeza.

Talvez o tamanho das matrizes deva ser zerado imediatamente após a criação?

Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Основы языка / Переменные - Документация по MQL5
 
TheXpert:

Não sei :) Na nossa empresa, eles receberão uma multa por escrever código como

No mínimo, será repreendido, e com razão, penso eu.

Antes de poder utilizar uma variável, deve atribuir-lhe um valor (inicializá-la explicitamente). Ou não concorda?

A inicialização explícita não implica a sua necessidade no momento da declaração. Mas se o valor da variável não inicializada for depois utilizado em alguns cálculos, as consequências são imprevisíveis.

 

Você assusta-me, Rashid, com todo o respeito.

Uma classe tem um construtor, que executa a inicialização inicial do objecto e incluindo a definição do valor por defeito, se for lógico.

Se a inicialização não acontecer, deve haver uma forma de saber se o objecto se encontra num estado adequado. Com uma corda faz muito mais sentido definir um valor por defeito.

std::string s = "";

Tal notação é paranóia, uma pessoa paranóica não pode escrever um código normal a priori.

Então as cordas não são inicializadas?

 
TheXpert:
Então as cordas não são inicializadas?
Claro que são inicializados, mas não para o fio vazio "", mas para o NULL.
 
TheXpert:

Você assusta-me, Rashid, com todo o respeito.

Uma classe tem um construtor, que é onde ocorre a inicialização do objecto e inclui a definição de um valor por defeito, se isso for lógico.

Se a inicialização não acontecer, deve haver uma forma de saber se o objecto se encontra num estado adequado. Com uma corda faz muito mais sentido definir um valor por defeito.

Tal notação é paranóia, uma pessoa paranóica não pode escrever um código normal a priori.

Então as cordas não são rubricadas?

Leia a ajuda - https://www.mql5.com/ru/docs/basis/types/classes:

Se uma estrutura contém variáveis de tipo string e/ou um objecto de matriz dinâmica , o compilador atribui um construtor implícito a tal estrutura, na qual todos os membros da estrutura de tipostringsão zerados e uma inicialização correcta é feita para o objecto de matriz dinâmica.

...

Construtores e destruidores

Um construtor é uma função especial que é chamada automaticamente quando se cria um objecto de estrutura ou uma classe, e é normalmente utilizada para inicializar membros da classe. Na discussão seguinte falaremos apenas das aulas, o acima exposto também se aplica às estruturas, salvo indicação em contrário. O nome do construtor deve coincidir com o nome da classe. O construtor não tem tipo de retorno (pode especificar o tipo vazio).

Certos membros da classe - cordas, matrizes dinâmicas e objectos que requerem inicialização - serão inicializados de qualquer forma, independentemente da presença de um construtor.

Документация по MQL5: Основы языка / Типы данных / Структуры и классы
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
  • www.mql5.com
Основы языка / Типы данных / Структуры и классы - Документация по MQL5
 

Isso é uma chatice... Pelo menos eu saberei.

Será NULL também em estruturas?

 
TheXpert:

Isso é uma chatice... Bem, pelo menos saberei.

Será NULL também em estruturas?

Basta comparar com NULL e você mesmo saberá tudo - Digite Nulo e constante NULL:

A variável constante predefinida NULL é de tipo nulo. Pode ser atribuída a variáveis de qualquer outro tipo fundamental sem conversão. Também é permitido comparar variáveis de tipos fundamentais com oNULL.

Exemplo:

//--- se uma cadeia não for inicializada, atribuir-lhe o nosso valor pré-definido
if(some_string==NULL) some_string="empty";

O NULLtambém pode ser comparado a apontadores para objectos criados utilizando o novo operador.

 
Rosh:

Antes de uma variável poder ser utilizada, deve ser-lhe atribuído um valor (explicitamente inicializado). Ou não concorda?

A inicialização explícita não implica a sua necessidade no momento da sua declaração. Mas se o valor de uma variável não inicializada for subsequentemente utilizado em alguns cálculos, as consequências são imprevisíveis.

Por falar em aves.

//Struct StrMQL4_Deal
struct StrMQL4_Deal
{
//----------------------------------------------------------------------------//
double TP = 0;
double SL = 0;
//----------------------------------------------------------------------------//
};

E como irá o compilador responder? E responderá ao seguinte '=' - utilização de cessão ilegal

//Class CMqlExpert
class CMqlExpert
//Purpose: Main class of trade system. 
{
//----------------------------------------------------------------------------//
protected:
//****************************************************************************//
//                    Protected declarations of the class                     //
//****************************************************************************//
bool TradeMonday    = true; //Trade in monday
bool TradeTuesday   = true; //Trade in tuesday
bool TradeWednesday = true; //Trade in wednesday
bool TradeThursday  = true; //Trade in thursday
bool TradeFriday    = true; //Trade in friday
//----------------------------------------------------------------------------//
public:

O compilador não estava dobrado - '=' - utilização de cessão ilegal.

A minha pergunta é - O que vai acontecer se o programador (neste caso, eu) não inicializar as variáveis antes de as utilizar (ele fá-lo da forma que o compilador requer e omite este momento no construtor)?


 
Interesting:

Tenho uma pergunta - O que acontece se o programador (neste caso eu) não se encarrega de inicializar as variáveis antes de as utilizar (fazendo-o conforme requerido pelo compilador e faltando este ponto no construtor)?

A questão vem de um principiante...
 
sergeev:
Parece uma pergunta de algum recém-chegado...

Bem, foi o que pensei na altura (foi há muito tempo, vem-me à cabeça), mas queria escrever um pedido no calor do momento. :)

Embora ainda não compreenda porque é que é proibido inicializar variáveis a nível de compilador.