Sergei Vladimirov : 예, 귀하의 질문을 이해합니다. 더 적절한 서명을 가진 함수가 있지만 보호되어 있기 때문에 호출할 수 없습니다. 예, 동작은 스튜디오와 다릅니다. MKL에는 더 엄격한 유형 제어가 있습니다(이 경우). 이것이 버그로 간주되어야 하는지 모르겠습니다. 함수에 전달된 인수의 유형을 제어하면 문제가 없습니다.
통제는 다소 선택적이고 따라서 더 논쟁의 여지가 있습니다.
class A { public : void f( int ) const {} /*(1)*/ void f( int ) {} /*(2)*/ }; class B : public A { public : void f( int ) const {} /*(3)*/ }; voidOnStart () { B b; //не const B b.f( 0 ); //(*)
}
여기 (*)에서 (비 const B b를 고려하여) A::f/*(2)*/ 호출이 더 적합합니다.
그러나 C++는 파생 클래스에 올바른 메서드가 있는 경우 항상 기본 클래스를 보다 적절한 메서드로 구문 분석하지 않습니다.
그리고 MQL - 이전 예제에서 더 적합한 메소드를 위해 기본 클래스를 분석했지만, 이 예제에서는 분석하지 않습니다(여기서 C++처럼 B::f/*(3)*/를 호출합니다). 단일 접근 방식이 없음을 의미합니다.
일관성 없는 제어의 또 다른 예: C++는 다음 코드를 찾습니다.
class A { public : void f( int i ) const {} void f( uint i ) {} }; void OnStart() { A a; a.f(( int ) 0 ); }
class A { public : void f( int ) const {} /*(1)*/ void f( int ) {} /*(2)*/ }; class B : public A { public : void f( int ) const {} /*(3)*/ }; voidOnStart () { B b; //не const B b.f( 0 ); //(*)
}
여기 (*)에서 (비 const B b를 고려하여) A::f/*(2)*/ 호출이 더 적합합니다.
그러나 C++는 파생 클래스에 올바른 메서드가 있는 경우 항상 기본 클래스를 보다 적절한 메서드로 구문 분석하지 않습니다.
그리고 MQL - 이전 예제에서 더 적합한 메소드를 위해 기본 클래스를 분석했지만, 이 예제에서는 분석하지 않습니다(여기서 C++처럼 B::f/*(3)*/를 호출합니다). 단일 접근 방식이 없음을 의미합니다.
일관성 없는 제어의 또 다른 예: C++는 다음 코드를 찾습니다.
class A { public : void f( int i ) const {} void f( uint i ) {} }; void OnStart() { A a; a.f(( int ) 0 ); }
오류 및 MQL - 솔리드
C++용 컴파일러는 무엇입니까? 나는 gcc를 가지고 있으며 모든 것이 오류없이 실행됩니다.
코드 기반에서 눈금 표시기를 설계했습니다 . 하지만 소스를 첨부할 수 없습니다. "파일 첨부"를 클릭하면 비문이 사라지지만 파일 선택 인터페이스는 나타나지 않습니다.
애드블록이 설치되어 있습니까? 모든 팝업을 차단하는
아무것도 변경하지 않았습니다. 모든 것이 이전에 작동했습니다.
체크아웃하는 동안 이 버튼을 클릭합니다.
답은 이것밖에 없다.
예, 귀하의 질문을 이해합니다. 더 적절한 서명을 가진 함수가 있지만 보호되어 있기 때문에 호출할 수 없습니다. 예, 동작은 스튜디오와 다릅니다. MKL에는 더 엄격한 유형 제어가 있습니다(이 경우). 이것이 버그로 간주되어야 하는지 모르겠습니다. 함수에 전달된 인수의 유형을 제어하면 문제가 없습니다.
통제는 다소 선택적이고 따라서 더 논쟁의 여지가 있습니다.
class A {
}public :
void f( int ) const {} /*(1)*/
void f( int ) {} /*(2)*/
};
class B : public A {
public :
void f( int ) const {} /*(3)*/
};
void OnStart ()
{
B b; //не const B
b.f( 0 ); //(*)
그러나 C++는 파생 클래스에 올바른 메서드가 있는 경우 항상 기본 클래스를 보다 적절한 메서드로 구문 분석하지 않습니다.
그리고 MQL - 이전 예제에서 더 적합한 메소드를 위해 기본 클래스를 분석했지만, 이 예제에서는 분석하지 않습니다(여기서 C++처럼 B::f/*(3)*/를 호출합니다). 단일 접근 방식이 없음을 의미합니다.
일관성 없는 제어의 또 다른 예: C++는 다음 코드를 찾습니다.
void f( int i ) const {}
void f( uint i ) {}
};
void OnStart()
{
A a;
a.f(( int ) 0 );
}
통제는 다소 선택적이고 따라서 더 논쟁의 여지가 있습니다.
class A {
}public :
void f( int ) const {} /*(1)*/
void f( int ) {} /*(2)*/
};
class B : public A {
public :
void f( int ) const {} /*(3)*/
};
void OnStart ()
{
B b; //не const B
b.f( 0 ); //(*)
그러나 C++는 파생 클래스에 올바른 메서드가 있는 경우 항상 기본 클래스를 보다 적절한 메서드로 구문 분석하지 않습니다.
그리고 MQL - 이전 예제에서 더 적합한 메소드를 위해 기본 클래스를 분석했지만, 이 예제에서는 분석하지 않습니다(여기서 C++처럼 B::f/*(3)*/를 호출합니다). 단일 접근 방식이 없음을 의미합니다.
일관성 없는 제어의 또 다른 예: C++는 다음 코드를 찾습니다.
void f( int i ) const {}
void f( uint i ) {}
};
void OnStart()
{
A a;
a.f(( int ) 0 );
}
C++용 컴파일러는 무엇입니까? 나는 gcc를 가지고 있으며 모든 것이 오류없이 실행됩니다.
void f( int i ) const {} //1
void f( unsigned int i ) {} //2
};
void OnStart ()
{
A a;
a.f(( int ) 0 );
}
(1 또는 2). 이제 컴파일러 메시지를 붙여넣겠습니다.
이것은 정말 엄격한 제어입니다. 한 방법은 서명에 의해 더 적합하고 다른 방법은 불변성에 의해
이것은 정말 엄격한 제어입니다. 한 방법은 서명에 의해 더 적합하고 다른 방법은 불변성에 의해
그리고 왜 그런 글을 쓰는지는 분명하지 않습니다.
f -> operator[]를 교체하고 최근의 예를 살펴보십시오. []를 왼쪽과 오른쪽으로 만드는 것을 고려하십시오. 취향에 불변성을 추가하십시오 - 그런 다음 템플릿으로 포장하면 비슷한 것을 얻을 수 있습니다.
If to make const - if 없는 변형이 고려됩니다.
명확성이 없다면 최소한 경고가 발행되어야 합니다.
f -> operator[]를 교체하고 최근의 예를 살펴보십시오. []를 왼쪽과 오른쪽으로 만드는 것을 고려하십시오. 취향에 불변성을 추가하십시오 - 그런 다음 템플릿으로 포장하면 비슷한 것을 얻을 수 있습니다.
어떤 예를 말씀하시는 건가요? 소스가 아니라 최종 녹음을 가져올 수 있습니까?
최종 결과는 다음과 같아야 합니다.
{
A< int > a;
int b = a[ 0 ];
a[ 0 ] = a[ 1 ];
a[ 1 ] = b;
}
최종 결과는 다음과 같아야 합니다.
{
A< int > a;
int b = a[ 0 ];
a[ 0 ] = a[ 1 ];
a[ 1 ] = b;
}