오류, 버그, 질문 - 페이지 759

 
WWer :

즉, 복사 생성자의 역할이 오버로드된 할당 연산자에 의해 수행되도록 해야 합니까?

뭐가 맞는지 모르겠지만 VS에서 복사 생성자의 역할은 할당 연산자에 의해 수행되지 않습니다.
 class tt
{
public :
         int f;
        tt(tt& u) {f = 1 ;}                // Копирующий конструктор, при выполнении его f == 1
        tt(){}
         void operator=(tt &u){f = 100 ;}   // При выполнении f == 100
};

tt fn()
{
        tt q3;
         return (q3);
}

int _tmain( int argc, _TCHAR* argv[])
{
        tt q2 = fn();
        std::cout<<q2.f;
         char input [ 54 ];
        std::cin>> input ;
         return 0 ;
}

1이 화면에 표시됩니다. 복사 생성자가 실행됩니다.

나는 이것이 "2) 오버로드 된 할당 연산자 로 라인의 주석 처리를 제거하는 것"이 이론상 도움이 되지 않아야 한다고 생각합니다.

 
220Volt :
뭐가 맞는지 모르겠지만 VS에서 복사 생성자의 역할은 할당 연산자에 의해 수행되지 않습니다.

1이 화면에 표시됩니다. 복사 생성자가 실행됩니다.

나는 이것이 "2) 과부하 할당 연산자 로 드레인의 주석 처리를 제거"하는 것이 이론상 도움이 되지 않는다고 생각합니다.

여기에서 복사 생성자가 실행됩니다.

tt q2 = fn();
fn() 함수 내부가 아닙니다.
 
mql5 :

여기에서 복사 생성자가 실행됩니다.

fn() 함수 내부가 아닙니다.

이 변형에서:

 class tt
{
public :
         int f;
        tt(tt& u) {f = 1 ;}
        tt(){f = 198 ;}
         void operator=(tt &u){f = 100 ; std::cout<< "Выполнился присваивающий конструктор" ;}
};

tt fn()
{
        tt q3;
         return (q3);
}

int _tmain( int argc, _TCHAR* argv[])
{
        tt q2 = fn();
        std::cout<<q2.f;
         char input [ 54 ];
        std::cin>> input ;
         return 0 ;
}
"할당 생성자 실행됨" 줄이 표시되지 않습니다.
 

그리고 이것이 나온 방법:

tt q2;
q2 = fn();
WWer , VS와 유추하여 특정 상황을 살펴봐야 하는 경우 복사/할당에 대한 구체적인 예를 들어야 합니다. 무엇을 할지는 그 자리에서 결정됩니다.
 
WWer :

왜 초기화합니까? 이것은 단지 이것을 위한 생성자가 있는 클래스의 인스턴스입니다.

네, 정말 죄송합니다.


그렇다면 이 목적을 위해 복사 생성자를 작성하는 것이 어떻게 올바른가요?

당신은 아주 정확하게 작성되었습니다. 객체를 반환하려는 getCopy() 함수에서 오류가 발생했습니다. 할당을 재정의한 후 이미 포인터를 반환하고 오류가 사라집니다.

--

여기서 오해는 언어에 정적 개체 및 동적 개체의 필드에 액세스하기 위한 구문의 동일한 표현과 관련된 일부 "구문적 반발"이 있다는 사실로 인해 발생할 수 있습니다(화살표가 아닌 점을 통해, 방법, 정말 편리합니다). 이것은 습관이 되어 객체와 객체에 대한 포인터를 구별하는 명확성을 다소 둔하게 할 수 있습니다. 이는 차례로 정적(또는 자동) 개체 변수에 무언가를 할당할 수 있다는 착각을 일으킬 수 있습니다. 복사 생성자가 정의되지 않는 한 할당 왼쪽에 있는 개체 변수는 전혀 그렇지 않습니다.

 
불행히도 이 시점에서 MQL5와 C++ 사이에는 차이가 있습니다.

C++는 반환값으로 fn() 함수 내부에 q2 객체를 생성합니다. 이것이 복사 생성자를 처리하는 이유입니다.

MQL5에서는 오브젝트가 외부에서 구성되기 때문에 차이점이 있습니다. 제거하다.


관심 있는 사람들을 위해: 이를 반환 값 최적화 라고 합니다.

 

동료들, 좋은 하루!

다른 지느러미에 대한 가격 값을 어떻게 얻을 수 있습니까? 악기 동기화 ? 예를 들어, 과거의 특정 시점에 다양한 상품에 대한 바의 종가를 의미합니다. CopyClose 기능 을 사용하고 막대 인덱스 로 값을 얻는 것은 완전히 정확하지 않습니다. 다른 기기에서 누락된 막대가 있을 수 있기 때문입니다. 내가 기억하는 한 mql4에는 BarShift 시간 함수가 있었는데 mql5에는 아날로그가 있습니까?

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyClose
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyClose
  • www.mql5.com
Доступ к таймсериям и индикаторам / CopyClose - Документация по MQL5
 

시간을 알면 이 기능을 사용할 수 있습니다.

시작 날짜 및 필요한 항목 수로 참조

int 복사 닫기 (
                symbol_name , // 기호 이름
    ENUM_TIMEFRAMES    timeframe , // 기간
    날짜 시간           start_time , // 어떤 날짜부터
    정수                count , // 복사할 양
    더블             닫기_배열[]        // 종가를 복사하기 위한 배열
);

 
Karlson :

시간을 알면 이 기능을 사용할 수 있습니다.

시작 날짜 및 필요한 항목 수로 참조

int 복사 닫기 (
                symbol_name , // 기호 이름
    ENUM_TIMEFRAMES    timeframe , // 기간
    날짜 시간           start_time , // 어떤 날짜부터
    정수                count , // 복사할 양
    더블             닫기_배열[]        // 종가를 복사하기 위한 배열
);

종가[i] EUR/USD와 종가[i] GBP/USD의 비율을 구하고 싶지만 지수 i를 참조하면 누락된 막대가 있기 때문에 막대가 여전히 시간상 다를 수 있다고 가정해 보겠습니다.

즉, 각 막대의 루프에서 CopyClose (Symbol, 0, date_of_current_bar, 1 , array)를 사용해야 합니까?

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyClose
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyClose
  • www.mql5.com
Доступ к таймсериям и индикаторам / CopyClose - Документация по MQL5
 

내가 보기에는 오래된 시간대의 막대가 거의 "사라지지" 않는 것 같습니다. 그러나 그렇습니다.. 표시된 날짜부터 하나의 막대를 얻습니다. 더 정확하게는 그로부터 가깝습니다.

또 다른 옵션은 CopyTime()을 통해 이 막대의 시간을 동시에 수신하고 동기화되도록 비교하는 것입니다.

그리고 세 번째 옵션(아마도 촉진)은 구조에서 CopyRates를 즉시 사용하는 것 입니다.

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
  • www.mql5.com
Доступ к таймсериям и индикаторам / CopyRates - Документация по MQL5