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

 

그렇게 생각하니?

 void f() const

포인터를 변경할 수는 없지만 포인터가 참조하는 개체는 변경할 수 있습니다. MQL5에는 변경할 수 없는 포인터가 없습니다. 따라서 const 수정자는 항상 포인터가 참조하는 개체에 적용됩니다.

 
Anton Zverev :

그렇다면 상수 포인터는 어디에 있다고 생각하십니까?!

f() 및 g() 메서드 에서 포인터는 상수가 됩니다.

MQL5에는 변경할 수 없는 포인터가 없습니다. 따라서 const 수정자는 항상 포인터가 참조하는 개체에 적용됩니다.

주제에 대한 충분한 지식 없이는 그러한 범주적 결론을 내리지 않아야 합니다. MQL에는 상수 포인터가 있으며 C++에서와 같은 방식으로 선언됩니다.

 
Alexey Navoykov :

주제에 대한 충분한 지식 없이는 그러한 범주적 결론을 내리지 않아야 합니다. MQL에는 상수 포인터가 있으며 C++에서와 같은 방식으로 선언됩니다.

MQL5에서 상수 포인터를 선언하는 방법?!
 

개발자의 설명을 기억하는 한 constness는 객체와 포인터 모두에 적용됩니다.

저것들. MQL에서 const T* 쓰기 === C++에서 const T* const

예전에는 그랬고 지금은 다를 수도 있지만 의심스럽습니다.

 

컴파일 오류

 template < typename T>
class A { public :
         bool operator ==( const A& ); //error: 'operator' - function must have a body
        T t;
};
class B {
        A< int > a;
};
template < typename T>
bool A:: operator ==( const A& )  { return false ; }
void OnStart ()
{
        A< int > a, b;
         Print ( a == b );
}
 

컴파일 오류

 template < typename T>
class A { public : T t; };
class B { public :
template < typename T> void g(   T  * );
template < typename T> void f( A<T> * );
};
template < typename T> void B::g(   T  * ) {} //нормально
template < typename T> void B::f( A<T> * ) {} //ошибка: 'f' - member function already defined with different parameters
void OnStart ()
{
        A< int > a;
        B b;
        b.g( &a );
        b.f( &a );
}
 
A100 :

...

 template < typename T>
bool A:: operator ==( const A& )  { return false ; }

다음과 같아야 합니다.

 template < typename T>
bool A<T>:: operator ==( const A& )  { return false ; }
 
Alexey Navoykov :

다음과 같아야 합니다.

따라서 C ++와 호환되지만 클래스 B만 "간섭"합니다. 제거하면 오류 없이 컴파일됩니다. 확인하는 것을 목적으로 하는 이유입니다.
 

컴파일 오류

 template < typename T>
class A {};
class B {
        void A() {}
         void f() { A(); } //error: 'A' - template mismatch
};
 

컴파일 오류

 template < typename T> class A {};
template < typename T> class B {};
class C {
template < typename T>
         void f( B<A<T> > * ) {}
        B<A< int > > *b;
public :
         void g() { f( b ); } //error: 'f' - cannot to apply function template
};
사유: