template < typename T> void F(T)
{
class A
{
void f() { new A; } // 'A' - declaration without typevoid g() { A* a; } // 'A' - pointer to this function type is not supported yet
};
};
voidOnStart ()
{
F( 0 );
}
class A
{
};
class B : protected A
{
};
voidOnStart ()
{
A* a;
B* b= (B*)a; // conversion from 'B *' to 'A *' is not accessible because of inheritance access
}
C++는 이 코드를 reinterpret_cast로 변환하고 MQL을 dynamic_cast로 변환합니다. 그리고 내가 이해하는 한 이것은 컴파일러가 컴파일 중에 캐스트 스피커 오류를 찾을 수 있는 경우입니다.
이 경우 reinterpret_cast는 불법이므로 이 코드가 C++로 컴파일된다는 사실은 인수가 아닙니다.
잠깐, 왜 모든 것을 섞고 있습니까? 그리고 여기 스피커 캐스트가 있습니까? 컴파일러의 작업에는 셜록 홈즈를 재생하고 프로그램 논리에서 무언가를 찾는 작업이 포함되지 않습니다. 언어 표준 준수에 대한 공식적인 검사만 수행하며 그 이상은 수행하지 않습니다. 그리고 표준의 관점에서 볼 때 모든 것이 나에게 맞습니다.
더욱이 여기서 요점은 전혀 캐스팅에 있지 않습니다. 내 예를 주의 깊게 살펴보면 보호와 관련된 문제가 있음을 알 수 있습니다. public으로 바꾸면 모든 것이 정상입니다. 개체 자체는 변경되지 않습니다. 저것들. MQL 컴파일러에서는 불필요한 제한일 뿐입니다.
그러므로 분명히 존재하지 않는 곳에서 은밀한 의미를 추측하고 찾지 마십시오. 그리고 평범한 컴파일러 오류만 있습니다.
컴파일 오류:
몇 가지 오류가 더 있습니다.
또한 포인터 캐스팅이 너무 똑똑했습니다.
다음 코드는 컴파일되지 않습니다.
캐스트가 명시적이지만. 모든 것이 C++에서 작동합니다.
또한 포인터 캐스팅이 너무 똑똑했습니다.
맞습니다. 컴파일러는 맹세합니다.
dynamic_cast, static_cast 및 reinterpret_cast에 대해 읽고 올바르게 사용해야 하는 경우와 사용하지 않는 경우에 대해 읽어보십시오.
C++는 이 코드를 reinterpret_cast로 변환하고 MQL을 dynamic_cast로 변환합니다. 그리고 내가 이해하는 한 이것은 컴파일러가 컴파일 중에 캐스트 스피커 오류를 찾을 수 있는 경우입니다.
이 경우 reinterpret_cast는 불법이므로 이 코드가 C++로 컴파일된다는 사실은 인수가 아닙니다.
C++는 이 코드를 reinterpret_cast로 변환하고 MQL을 dynamic_cast로 변환합니다. 그리고 내가 이해하는 한 이것은 컴파일러가 컴파일 중에 캐스트 스피커 오류를 찾을 수 있는 경우입니다.
이 경우 reinterpret_cast는 불법이므로 이 코드가 C++로 컴파일된다는 사실은 인수가 아닙니다.
잠깐, 왜 모든 것을 섞고 있습니까? 그리고 여기 스피커 캐스트가 있습니까? 컴파일러의 작업에는 셜록 홈즈를 재생하고 프로그램 논리에서 무언가를 찾는 작업이 포함되지 않습니다. 언어 표준 준수에 대한 공식적인 검사만 수행하며 그 이상은 수행하지 않습니다. 그리고 표준의 관점에서 볼 때 모든 것이 나에게 맞습니다.
더욱이 여기서 요점은 전혀 캐스팅에 있지 않습니다. 내 예를 주의 깊게 살펴보면 보호와 관련된 문제가 있음을 알 수 있습니다. public으로 바꾸면 모든 것이 정상입니다. 개체 자체는 변경되지 않습니다. 저것들. MQL 컴파일러에서는 불필요한 제한일 뿐입니다.
그러므로 분명히 존재하지 않는 곳에서 은밀한 의미를 추측하고 찾지 마십시오. 그리고 평범한 컴파일러 오류만 있습니다.