템플릿 매개변수가 있는 컴파일러 버그 = void* - 페이지 4

 
Dmitry Fedoseev :

이 링크를 직접 읽어 보셨습니까? Slava는 이전 MQL4에서 우선 순위가 뒤죽박죽이었기 때문에 이것이 왜 그렇게 되었는지 널리 설명합니다. 그래서 지금 관심을 받는 것이 중요합니다. 경고일 뿐이라는 것조차 안타까운 일입니다. 오류가 있으면 더 좋을 것입니다.

아니면, 때리다

 
Dmitry Fedoseev :

이 링크를 직접 읽어 보셨습니까? Slava 는 이전 MQL4에서 우선 순위가 뒤죽박죽 이었기 때문에 이것이 그렇게 된 이유를 널리 설명합니다. 그래서 지금 관심을 받는 것이 중요합니다. 경고일 뿐이라는 것조차 안타까운 일입니다. 오류가 있으면 더 좋을 것입니다.

그래서 무엇? 여기:

 int i = 1 << 2 + 3 ;

MQL4에서도 우선순위가 뒤섞였습니까? 이것은 특별한 경우가 아니라 일반적인 접근 방식입니다. 지정된 특별한 경우에, 경고 오류를 발생시킬 수 있고 발생해야 합니다(예외로). 하지만 왜 다른 모든 항목으로 확장되어야 합니까?

게다가 MQL4에서 (내가 아는 한) 연산자 || 게으름이 없었다. 그리고 이것에도 불구하고 MQL5 컴파일러는 유사한 경우에 경고를 발행하지 않습니다(여러 원자적 연산으로 || 분할을 제안하지 않음)

그 역사의 해당 페이지를 넘겼을 때

 

나는 문서 에서도 다음과 같이 말합니다.

" 작업 순서를 변경 하려면 우선 순위가 가장 높은 괄호 를 사용하십시오."

이것은 다른 목적(재정렬과 관련이 없는)을 위한 대괄호의 사용이 여전히 정당화될 필요가 있음을 의미합니다.

 
fxsaber :

의심해야 할 때 프로그래머 수의 임계 값은 어디인지 궁금합니다. 5 - 소수. 1000은 충분하지 않습니다. 10,000 - 생각하십시오. 그리고 마지막으로 N - 나는 믿습니다. 그러나 당시 (N-1)-아직도 믿지 않았다.

임계값은 절대적으로 정의되는 것이 아니라 다르게 생각하는 사람들의 수에 대한 백분율로 정의됩니다. 대부분이 틀릴 수 있지만 99%는 아닙니다. 이것은 신뢰할 수 있는 기준입니다.

 
A100 :
그리고 1961x32에서는 모든 것이 작동합니다... 실수입니다!

흠, 흥미로운 기능입니다. 이제부터는 플랫폼의 비트 심도도 표시하겠습니다.

 
A100 :

그래서 무엇? 여기:

 int i = 1 << 2 + 3 ;

MQL4에서도 우선순위가 뒤섞였습니까?

예, 문서 에 따르면 이전 버전에서는 우선 순위가 다릅니다.

그러나 제 생각에는이 모든 것이 오랫동안 관련성을 잃었습니다. 엄격한 지시가 지정된 경우에는 더욱 그렇습니다. 그리고 누군가가 고대 코드를 파헤쳐서 컴파일하려고 하면 어쨌든 그곳에서 모든 것을 다시 해야 할 것입니다. 따라서 이러한 경고는 이미 과거의 유물입니다. 따라서 경고가 갑자기 흩어져서는 안된다는 데 동의합니다.

 
주제에 관한 것이 아니라 죄송합니다. 아는 사람이 있으면 알려주세요. mql에 (int) StringFormat ("% i",ptr)이 아닌 void*ptr에서 int를 가져오는 방법이 있습니까?
 
A100 :

따라서 코드에서 대괄호는 아무 의미가 없으며 ... 문은 비논리적이며 대괄호가 있는 경우 우선 순위/순서가 실제로 변경되었는지 여부와 내 코드에서 대괄호를 파악해야 합니다. 그 자체로 우선 순위/순서의 변경을 의미합니다(이미 괄호의 존재/부재가 명확함)

괄호
fxsaber
A100
있다
불분명
작업 우선 순위가 변경됨
아니요
작업 우선 순위가 변경되지 않았습니다.
작업 우선 순위가 변경되지 않았습니다.

괄호는 표현의 해석에 있어 완전한 모호성을 제공합니다.

경고 자체(단순히 대괄호에 관한 것이 아니라)는 오류에 대한 것이 아니라 오류 가능성에 대한 것입니다. 경고를 완전히 없애겠다고 제안합니다. tk. 우선 순위(괄호뿐만 아니라)는 컴파일러에 명확하게 명시되어 있습니다.

A100 :

임계값은 절대적으로 정의되는 것이 아니라 다르게 생각하는 사람들의 수에 대한 백분율로 정의됩니다. 대부분이 틀릴 수 있지만 99%는 아닙니다. 이것은 신뢰할 수 있는 기준입니다.

수량에 대한 동일한 질문은 절대적인 것이 아니라 상대적인 것입니다. 98%가 신뢰할 수 있는 기준입니까? 그리고 97%? 신뢰성을 의심해야 할 때 임계값은 어디입니까? 네, 주변 사람들 중 적어도 100%는 당신이 미치광이 킬러라고 주장합니다. 이것이 신뢰할 수 있는 기준입니까?

 
Ilya Malev :
주제에 관한 것이 아니라 죄송합니다. 아는 사람이 있으면 알려주십시오. mql에 (int)StringFormat("%i",ptr)을 제외하고 void*ptr에서 int를 가져오는 방법이 있습니까?

문자열을 통해서만 다음과 같이 StringConcatenate() 를 통해 포인터의 주소를 가져오곤 했습니다.

Cinteger *x = new Cinteger();
   string s;
   int zz= StringConcatenate (s, "*x = " ,x);
   Print ( "OK " ,s);
 
Alexey Navoykov :

가장 평범한 예는 배열 클래스입니다. 이 경우 포인터를 저장하는 데 사용됩니다.

솔직히 말해서 그러한 어레이의 의심스러운 이점. 그것으로 무엇을 할 수 있습니까? 배열 구성원에 대해 삭제가 자동으로 호출되지 않는다는 것을 알고 계십니까?