Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 214

 
fxsaber # :

Daha önce böyle bir yazı görmemiştim.

Kullanmak)))

 
Vladimir Simakov # :

Kullanmak)))

Vladimir, bu tür şemaları nereden alıyorsunuz?, o zaman bana yardımcı oldular, minimum döngü ile çubuk bulma konumda bir yerde hazır görüntüler var mı? Kendi kendime öğrendim, başlangıçta farklı bir profilde

sadece mantık devrelerini topla, ekle, döngülerde kaydır ...
 
Vladimir Simakov # :

Bu yüzden çok büyük bir bug. Misal:

Bellek tahsis edilir, serbest bırakıldığında yıkıcı çağrılır (bu, RAII'ye göre beklenen davranış hakkında bir ipucudur), ancak nesneyi oluştururken kurucunun çağrılması unutulmuştur)))

Bu 2. {} hatası

Hatırlatmama izin verin: 1. asma ile, 3. sendika ile

 
Vladimir Simakov # :

Kullanmak)))

Ah, bu artımlı kısalık...)
 
Fast235 # :

Vladimir, bu tür şemaları nereden alıyorsunuz?, o zaman bana yardımcı oldular, minimum döngü ile çubuk bulma konumda bir yerde hazır görüntüler var mı? Kendi kendime öğrendim, başlangıçta farklı bir profilde

sadece mantık devrelerini topla, ekle, döngülerde kaydır ...

Bunu, bitmiş olandan anlamadan kullanmak gerekli değildir. Bu tür kayıtlarla, buradan biraz daha karmaşık bir şeye ihtiyacınız varsa, her zaman bulması kolay olmayan böcekler, havaya yapıştırabilirsiniz)))

 
Vladimir Simakov # :

Bunu, bitmiş olandan anlamadan kullanmak gerekli değildir. Bu tür kayıtlarla, buradakinden biraz daha karmaşık bir şeye ihtiyacınız varsa, her zaman bulması kolay olmayan böcekler, havaya yapıştırabilirsiniz)))

çubuk aramalarınız numaralandırma ve şablonlarla yapıldı))

Şablonlar neredeyse hiç çalışmamak için ertelendi, ancak kelimenin tam anlamıyla bir saat içinde nüfuz etti.

onları kendim için koddan çıkardım, numaralandırmalarla birlikte, görünüşe göre onları kullanmak için daha ciddi bir göreviniz vardı.

--

Ekle

Hepsi forumda, sadece teşekkür ederim.

 
Vladimir Simakov # :

Bu yüzden çok büyük bir bug. Misal:

Bellek tahsis edilir, serbest bırakıldığında yıkıcı çağrılır (bu, RAII'ye göre beklenen davranış hakkında bir ipucudur), ancak bir nesne oluştururken yapıcıyı çağırmayı unuttular)))

Mesaj için teşekkürler.
Düzeltildi.

Bu kod derleme hatası verecektir, çünkü MQL'deki init dizileri hala eksik.

Yapılar için, sıra başlatma, uygun parametrelere sahip bir kurucu çağrısı ile değiştirilmez - bunu eklemeyi planlıyoruz (şimdilik süresiz olarak ertelendi, ancak yeni kodun bir kısmı ürüne "sızdırıldı").



 

@A100

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri

A100 , 2021.11.16 13:43

Mantıklı değil çünkü:

 struct X {
    int i;
};
void OnStart ()
{
    X x[ 200000 ] = {};
}

F5 donuyor. Ayrıca, bu tartışmalı bir yapıcı baypas


Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri

fxsaber , 2021.11.17 02:07

 struct MqlTick2 : private MqlTick {};

void OnStart ()
{
  MqlTick2 Ticks[ 4 ] = {}; // OK
  
   ZeroMemory (Ticks); // 'Ticks' - not allowed for objects with protected members or inheritance
}

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri

A100 , 2021.11.17 02:20

4. hatayı kendin bildirdin. ZeroMemory neden {} öğesinden daha kötü? Onlar. özel erişim için bazı yetkisiz mekanizmalara sahibiz, ancak derleyici herhangi bir nedenle tespit edemez.

Geliştiricilerin düzeltmeyeceği beklentisi? Derleyici ZeroMemory'ye de tepki vermediğinde


Mql'nin C++'dan türetildiğini hatırlarsak, o zaman bu örneklerin her ikisi (analogları) orada iyi çalışır, çünkü bu sınıflarda kurucu yoktur (yani, örtük bir kurucu vardır):

  • ClassX bildirimi x[n]={}; her dizi öğesinin değer başlatmasıyla sonuçlanır .
  • ClassX'in kullanıcı tanımlı kurucuları yoksa (ancak silinmemiş bir varsayılan kurucuya sahipse), özel alanların varlığından bağımsız olarak sınıf nesnelerinin sıfır başlatılması gerçekleştirilir.
  • Ancak const alanları varsa, varsayılan tor örtük olarak kaldırılacaktır, dolayısıyla derleyici hatası.

C++'da örnek:

#include <iostream>
using namespace std;

class X
{
     int a;
     public :
     int get (){ return a;}

     //X(){}   //так массив x не обнуляется
     //а если нет конструктора - то обнуляется
};

int main()
{
    X x[ 10 ]={};
     for ( int i= 0 ; i< 10 ;i++)   cout<<x[i]. get ()<<endl;
}

Yani yapı/sınıfta const alanları yoksa işin mantığı doğrudur.

 
Sınıfta önemsiz alanlar (nesneler) varsa, tüm nesnenin sıfır başlangıcından sonra, bu alanlar için varsayılan c-tor'larının çağrılacağını eklemeyi unuttum.
 
fxsaber # :

Daha önce böyle bir yazı görmemiştim.

MQL5'teki araştırmama baktım, daha kötü olabilir, hatta birkaç zaman dilimi için göstergedeki geçmişi pompalarım:

 void FindHighLow(THL &hl[], const ENUM_TIMEFRAMES tf, const datetime start_time, const int sz_buf = 1000 )
{
   ZeroMemory (hl); //hl структура
   datetime st = start_time;
   MqlRates rates[];
   for ( int i = 0 , c = CopyRates ( _Symbol , tf, st, sz_buf, rates); ArraySize (rates) > 0 && i < ArraySize (hl);
         st = rates[ 0 ].time - PeriodSeconds (tf), c = CopyRates ( _Symbol , tf, st, sz_buf, rates))
   {
        for(int j  = ArraySize(rates) - 1; j >= 0 && i < ArraySize(hl); j--)
      	{
		....	
	}
   }


for deyimine yazılabilecek çok şey var)))