일반적으로 MQL 컴파일러가 내가 생각한 것만큼 똑똑하지 않다는 것을 유감스럽게 인정해야 합니다. ) 나는 심지어 말할 것입니다. - 전혀 똑똑하지 않습니다. 아무데도 사용되지 않고 아무 것도 하지 않는 더미 개체가 만들어지므로 컴파일러는 상관하지 않습니다. 최적화가 없습니다. 나는 순전히 일의 속도로 판단한다. 그리고 어떤 이유로 새 빌드에서는 이전 빌드보다 느리게 작동합니다.
개발자 는 알고 있습니다. 그러나 컴파일러에 의한 이러한 최적화는 해결되는 작업의 우선 순위와는 거리가 멀습니다.
따라서 OnTesterInit에서 기본 패스 테이블을 변경하는 기능을 추가할 것을 제안합니다.
int PassesSet( constint Index, constMqlParam & Parameters[] );
매개변수 세트 자체는 시스템에 저장되지 않고 고유한 조합 번호로 계산된다고 생각합니다(이제 통과 번호와 일치함). 따라서 조합의 순서만 변경할 수 있으며 구성은 변경할 수 없습니다. 저것들. 이 경우 SwapPasses(long index1, long index2)와 같습니다.
매개변수 세트 자체는 시스템에 저장되지 않고 고유한 조합 번호로 계산된다고 생각합니다(이제 통과 번호와 일치함). 따라서 조합의 순서만 변경할 수 있으며 구성은 변경할 수 없습니다. 저것들. 이 경우 SwapPasses(long index1, long index2)와 같습니다.
당신이 옳은 것 같다. 이제 순서는 EA 소스 코드의 입력 라인 교체를 통해 여전히 영향을 받을 수 있습니다.
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();
결과적으로 Reset()이 작동하지 않는 것으로 나타났습니다. m_member 필드는 지워지지 않습니다.
질문: 컴파일러는 빌드 시 const 개체(또는 이와 유사한 것)에서 비 const 메서드가 호출되고 있다고 보고(오류/경고)하지 않아야 합니까?
결과적으로 Reset()이 작동하지 않는 것으로 나타났습니다. m_member 필드는 지워지지 않습니다.
질문: 컴파일러는 빌드 시 const 개체(또는 이와 유사한 것)에서 비 const 메서드가 호출되고 있다고 보고(오류/경고)하지 않아야 합니까?
포인터를 반환합니다.
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();
일반적으로 MQL 컴파일러가 내가 생각한 것만큼 똑똑하지 않다는 것을 유감스럽게 인정해야 합니다. ) 나는 심지어 말할 것입니다. - 전혀 똑똑하지 않습니다. 아무데도 사용되지 않고 아무 것도 하지 않는 더미 개체가 만들어지므로 컴파일러는 상관하지 않습니다. 최적화가 없습니다. 나는 순전히 일의 속도로 판단한다. 그리고 어떤 이유로 새 빌드에서는 이전 빌드보다 느리게 작동합니다.
개발자 는 알고 있습니다. 그러나 컴파일러에 의한 이러한 최적화는 해결되는 작업의 우선 순위와는 거리가 멀습니다.
ZY 컴파일러에는 이러한 모호성도 있습니다.
개발자 는 알고 있습니다. 그러나 컴파일러에 의한 이러한 최적화는 해결되는 작업의 우선 순위와는 거리가 멀습니다.
예, 하지만 놀랍습니다. 지난 몇 년 동안 여기에서 너무 많이 자랑해서 옵티마이저의 품질을 전례 없는 수준으로 끌어올렸다고 가정하지만 실제로는 그런 간단한 것조차 처리할 수 없습니다. 더 복잡한 것에 대해 무엇을 말할 수 있습니까?
따라서 OnTesterInit에서 기본 패스 테이블을 변경하는 기능을 추가할 것을 제안합니다.
매개변수 세트 자체는 시스템에 저장되지 않고 고유한 조합 번호로 계산된다고 생각합니다(이제 통과 번호와 일치함). 따라서 조합의 순서만 변경할 수 있으며 구성은 변경할 수 없습니다. 저것들. 이 경우 SwapPasses(long index1, long index2)와 같습니다.
하지만 내가 틀릴 수 있습니다.
매개변수 세트 자체는 시스템에 저장되지 않고 고유한 조합 번호로 계산된다고 생각합니다(이제 통과 번호와 일치함). 따라서 조합의 순서만 변경할 수 있으며 구성은 변경할 수 없습니다. 저것들. 이 경우 SwapPasses(long index1, long index2)와 같습니다.
당신이 옳은 것 같다. 이제 순서는 EA 소스 코드의 입력 라인 교체를 통해 여전히 영향을 받을 수 있습니다.
당신이 옳은 것 같다. 이제 순서는 EA 소스 코드의 입력 라인 교체를 통해 여전히 영향을 받을 수 있습니다.
이것은 최적화 알고리즘을 죽입니다. 이는 임의의 방향으로 최적화하는 것과 같습니다.
이것은 최적화 알고리즘을 죽입니다. 이는 임의의 방향으로 최적화하는 것과 같습니다.
우리는 처음에 완전한 흉상에 대해 이야기하고 있습니다.
점차적으로 OOP를 마스터하고 하나의 명확하지 않은 것을 만났습니다.
클래스 A가 있고 그 필드는 다른 클래스 B의 객체입니다.
클래스 A에서 클래스 B의 개체를 반환하는 상수 메서드 가 호출됩니다.
그 후 클래스 B의 메소드가 호출되어 수신된 객체의 매개변수를 지웁니다.
다음과 같습니다(예제는 브라우저에 작성되어 단순화됨).
결과적으로 Reset()이 작동하지 않는 것으로 나타났습니다. m_member 필드는 지워지지 않습니다.
질문: 컴파일러는 빌드 시 const 개체(또는 이와 유사한 것)에서 비 const 메서드가 호출되고 있다고 보고(오류/경고)하지 않아야 합니까?
질문: 컴파일러는 빌드 시 const 개체(또는 이와 유사한 것)에서 비 const 메서드가 호출되고 있다고 보고(오류/경고)하지 않아야 합니까?
이유는 암시적 복사 생성자가 임시 개체 에서 호출되는 Reset 의 결과로 호출되기 때문일 수 있습니다.
이유는 암시적 복사 생성자가 임시 개체 에서 호출되는 Reset 의 결과로 호출되기 때문일 수 있습니다.
점차적으로 OOP를 마스터하고 하나의 명확하지 않은 것을 만났습니다.
필드가 다른 클래스 B의 객체인 클래스 A가 있습니다.
클래스 A에서 클래스 B의 개체를 반환하는 상수 메서드 가 호출됩니다.
그 후 클래스 B의 메소드가 호출되어 수신된 객체의 매개변수를 지웁니다.
다음과 같습니다(예제는 브라우저에 작성되어 단순화됨).
결과적으로 Reset()이 작동하지 않는 것으로 나타났습니다. m_member 필드는 지워지지 않습니다.
질문: 컴파일러는 빌드 시 const 개체(또는 이와 유사한 것)에서 비 const 메서드가 호출되고 있다고 보고(오류/경고)하지 않아야 합니까?