mql5 언어의 특징, 미묘함 및 작업 방법 - 페이지 214

 
fxsaber # :

전에 그런 게시물을 본 적이 없습니다.

사용)))

 
Vladimir Simakov # :

사용)))

블라디미르, 그런 계획은 어디에서 얻습니까? 최소한의주기로 막대 찾기에 관한 주제에서 기성품 이미지가 어딘가에 있습니까? 나는 독학, 처음에는 다른 프로필에서

논리 회로를 수집하고, 추가하고, 주기적으로 스크롤하십시오 ...
 
Vladimir Simakov # :

그래서 그것은 지옥의 버그입니다. 예시:

메모리가 할당되고 소멸자가 해제될 때 호출됩니다(RAII에 따르면 예상되는 동작에 대한 힌트임). 그러나 객체를 생성 할 때 생성자가 호출되는 것을 잊었습니다)))

이것은 두 번째 {} 오류입니다.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

mql5 언어의 특징, 미묘함 및 작업 방법

A100 , 2021.11.16 13:43

F5가 멈춥니다. 또한 이것은 논란 의 여지가 있는 생성자 우회입니다.

1위는 교수형, 3위는 결합

 
Vladimir Simakov # :

사용)))

아, 그 사후 증분 간결함...)
 
Fast235 # :

블라디미르, 그런 계획은 어디에서 얻습니까? 최소한의주기로 막대 찾기에 관한 주제에서 기성품 이미지가 어딘가에 있습니까? 나는 독학, 처음에는 다른 프로필에서

논리 회로를 수집하고, 추가하고, 주기적으로 스크롤하십시오 ...

이해 없이 완성된 것부터 이것을 사용할 필요는 없습니다. 이러한 기록으로 여기보다 조금 더 복잡한 것이 필요하면 항상 찾기가 쉽지 않은 버그를 공중에 붙일 수 있습니다)))

 
Vladimir Simakov # :

이해 없이 완성된 것부터 이것을 사용할 필요는 없습니다. 이러한 기록으로 여기보다 조금 더 복잡한 것이 필요하면 항상 찾기가 쉽지 않은 버그를 공중에 붙일 수 있습니다)))

귀하의 바 검색은 열거 및 템플릿으로 이루어졌습니다))

템플릿은 거의 공부하지 않기 위해 연기되었지만 문자 그대로 한 시간 만에 침투했습니다.

열거형과 함께 코드에서 직접 제거했습니다. 분명히 사용하려면 더 심각한 작업이 필요했습니다.

--

추가하다

포럼에 있는 모든 것입니다. 감사합니다.

 
Vladimir Simakov # :

그래서 그것은 지옥의 버그입니다. 예시:

메모리가 할당되고 소멸자가 해제될 때 호출됩니다(RAII에 따르면 예상되는 동작에 대한 힌트임). 그러나 객체를 생성 할 때 생성자를 호출하는 것을 잊었습니다)))

메시지 주셔서 감사합니다.
수정했습니다.

이 코드는 컴파일 오류를 제공합니다. MQL의 초기화 시퀀스는 여전히 불완전합니다.

구조의 경우 시퀀스 초기화는 적절한 매개변수가 있는 생성자 호출로 대체되지 않습니다. 이를 추가할 계획입니다(지금은 무기한 연기되었지만 일부 새 코드가 제품에 "유출"됨).



 

@A100

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

mql5 언어의 특징, 미묘함 및 작업 방법

A100 , 2021.11.16 13:43

다음과 같은 이유로 의미가 없습니다.

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

F5가 멈춥니다. 또한 이것은 논란 의 여지가 있는 생성자 우회입니다.


거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

mql5 언어의 특징, 미묘함 및 작업 방법

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
}

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

mql5 언어의 특징, 미묘함 및 작업 방법

A100 , 2021.11.17 02:20

네 번째 오류를 직접 보고하셨습니다. ZeroMemory가 {}보다 나쁜 이유는 무엇입니까? 저것들. 컴파일러가 어떤 이유로 감지하지 못하는 private 접근을 위한 승인되지 않은 메커니즘이 있습니다.

개발자가 수정하지 않을 것이라는 기대? 컴파일러 가 ZeroMemory에도 반응하지 않으면


mql이 C++에서 파생되었다는 것을 기억한다면 이 클래스에는 생성자가 없기 때문에(즉, 암시적 생성자가 있기 때문에) 이 두 예제(그 유사체)가 모두 거기에서 잘 작동합니다.

  • ClassX 선언 x[n]={}; 결과적 으로 각 배열 요소의 값 초기화가 발생합니다.
  • ClassX에 사용자 정의 생성자가 없는 경우(그러나 삭제되지 않은 기본 생성자가 있는 경우) 개인 필드의 존재 여부에 관계없이 클래스 객체의 제로 초기화가 수행됩니다.
  • 그러나 const 필드가 있으면 기본 토르가 암시적으로 제거되므로 컴파일러 오류가 발생합니다.

C++의 예:

#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;
}

따라서 구조체/클래스에 const 필드가 없으면 작업 논리가 올바른 것입니다.

 
클래스에 중요하지 않은 필드(객체)가 있는 경우 전체 객체를 초기화하지 않으면 기본 c-tor가 해당 필드에 대해 호출된다는 점을 추가하는 것을 잊었습니다.
 
fxsaber # :

전에 그런 게시물을 본 적이 없습니다.

MQL5에 대한 내 연구를 살펴보면 더 나쁠 수 있습니다. 심지어 여러 기간 동안 지표의 기록을 펌핑합니다.

 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 문에 쓸 수 있는 것들이 많이 있습니다)))