Hatalar, hatalar, sorular - sayfa 1953

 
Alexey Navoykov :

Genel olarak, MQL derleyicisinin düşündüğüm kadar akıllı olmaktan çok uzak olduğunu üzülerek itiraf etmeliyim) Hatta diyebilirim ki - hiç akıllı değil ) Basit örnekler çizmeye çalıştım ve ortaya çıktı ki, hiçbir yerde kullanılmayan ve hiçbir şey yapmayan kukla nesne oluşturulur, derleyici umursamaz. Optimizasyon yok. Tamamen işin hızına göre karar veririm. Ve nedense yeni yapılarda eskilerine göre daha yavaş çalışır.

Geliştiriciler farkında . Ancak derleyici tarafından yapılan bu tür bir optimizasyon, çözülmekte olan görevlerin önceliğinden uzaktır.

ZY Derleyicinin de bu tür belirsizlikleri vardır.

 
fxsaber :

Geliştiriciler farkında . Ancak derleyici tarafından yapılan bu tür bir optimizasyon, çözülmekte olan görevlerin önceliğinden uzaktır.

Evet, ama bu sadece şaşırtıcı, önceki yıllarda burada o kadar çok övündüler ki, optimize edicinin kalitesini benzeri görülmemiş yüksekliklere yükselttiler, ama aslında bu kadar basit şeylerle bile baş edemiyorlar. Daha karmaşık olanlar hakkında ne söyleyebiliriz.

 
fxsaber :

Bu nedenle, varsayılan geçiş tablosunu OnTesterInit olarak değiştirme yeteneği eklemeyi öneriyorum:

 int PassesSet( const int Index, const MqlParam & Parameters[] );

Parametre kümelerinin kendilerinin sistemde saklanmadığını, ancak benzersiz bir kombinasyon numarasıyla hesaplandığını düşünüyorum (şimdi geçiş numarasıyla eşleşiyor). Bu nedenle, yalnızca kombinasyonların sırasını değiştirebilirsiniz, kompozisyonlarını değiştiremezsiniz. Onlar. bu durumda SwapPasses(long index1, long index2) gibi bir şey olurdu.

Ama yanılabilirim.

 
Alexey Navoykov :

Parametre kümelerinin kendilerinin sistemde saklanmadığını, ancak benzersiz bir kombinasyon numarasıyla hesaplandığını düşünüyorum (şimdi geçiş numarasıyla eşleşiyor). Bu nedenle, yalnızca kombinasyonların sırasını değiştirebilirsiniz, kompozisyonlarını değiştiremezsiniz. Onlar. bu durumda SwapPasses(long index1, long index2) gibi bir şey olurdu.

Belki de haklısın. Şimdi sıra, EA kaynak kodundaki giriş satırlarının Takas yoluyla bir şekilde etkilenebilir.

 
fxsaber :

Belki de haklısın. Şimdi sıra, EA kaynak kodundaki giriş satırlarının Takas yoluyla bir şekilde etkilenebilir.

Bu, optimizasyon algoritmasını öldürür - rastgele bir yönde optimizasyon yapmak gibidir.

 
Stanislav Korotky :

Bu, optimizasyon algoritmasını öldürür - rastgele bir yönde optimizasyon yapmak gibidir.

İlk etapta tam bir baskından bahsediyoruz.

 

Yavaş yavaş OOP'ta ustalaşmak ve bariz olmayan bir şeyle tanıştı.

Alanları başka bir B sınıfının nesneleri olan bir A sınıfı vardır.

A sınıfında, B sınıfının bir nesnesini döndüren sabit bir yöntem çağrılır.

Bundan sonra, alınan nesnenin parametrelerini silen B sınıfı yöntemi çağrılır.

Şuna benziyor (örnek basitleştirilmiştir, tarayıcıda yazılmıştır):

 class B
{
private :
   int m_width;
   int m_length;
public :
   void Reset() { m_width = 0 ; m_length = 0 ; }
}
class A
{
private :
   B m_member;
public :
   B GetBMember() const { return ( m_member ); }
}
//---
A obj;
obj.GetBMember().Reset();

Sonuç olarak, Reset()'in çalışmadığı ortaya çıktı, yani. m_member alanları temizlenmez.

Soru: Derleyici, derleme sırasında const olmayan bir yöntemin bir const nesnesinde (veya bunun gibi bir şeyde) çağrıldığını bildirmemeli mi (hata/uyarı)?

 
Alexey Kozitsyn :

Soru: Derleyici, derleme sırasında const olmayan bir yöntemin bir const nesnesinde (veya bunun gibi bir şeyde) çağrıldığını bildirmemeli mi (hata/uyarı)?


Bunun nedeni, geçici bir nesnede Reset'in çağrılmasının bir sonucu olarak örtük kopya oluşturucunun çağrılması olabilir.

 
Sergey Dzyublik :

Bunun nedeni, geçici bir nesnede Reset'in çağrılmasının bir sonucu olarak örtük kopya oluşturucunun çağrılması olabilir.

Teşekkür ederim. Muhtemelen haklısınız ve const belirteci sonucu etkilemez (onlu veya onsuz sıfırlama yoktur).
 
Alexey Kozitsyn :

Yavaş yavaş OOP'ta ustalaşmak ve bariz olmayan bir şeyle tanıştı.

Alanları başka bir B sınıfının nesneleri olan bir A sınıfı vardır.

A sınıfında, B sınıfının bir nesnesini döndüren sabit bir yöntem çağrılır.

Bundan sonra, alınan nesnenin parametrelerini silen B sınıfı yöntemi çağrılır.

Şuna benziyor (örnek basitleştirilmiştir, tarayıcıda yazılmıştır):

Sonuç olarak, Reset()'in çalışmadığı ortaya çıktı, yani. m_member alanları temizlenmez.

Soru: Derleyici, derleme sırasında const olmayan bir yöntemin bir const nesnesinde (veya bunun gibi bir şeyde) çağrıldığını bildirmemeli mi (hata/uyarı)?

İşaretçileri döndür.
 class B
{
private :
   int m_width;
   int m_length;
public :
   void Reset() { m_width = 0 ; m_length = 0 ; }
}
class A
{
private :
   B m_member;
public :
   B * GetBMember() const { return ( & m_member ); }
}
//---
A obj;
obj.GetBMember().Reset();