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

[삭제]  

유명한 인터뷰 질문입니다.

나는 무엇을 할 것인가?

 int i = 5 ;
i = i++ + ++i;
MQL5는 12를 반환합니다. MS Visual Studio 는 13을 반환합니다.
 
Aleksey Rodionov :

C++에서와 같이 작동하는 것 같습니다. 그래서 예를 들어 C++를 읽기로 결정했습니다. 단위당 동일한 값은 차이일 뿐입니다. 두 번째 경우 "y"는 5를 할당한 다음 추가하고, 첫 번째 예에서는 먼저 추가한 다음 할당하는 것과 같습니다(오랫동안 작동 방식 =D)

mql5에서 이것들은 동등한 연산이고, C++에서는 다릅니다. 아래에서 방금 c++ 테스트의 예를 제시했습니다))

 
. ... Rick D. ... . :

유명한 인터뷰 질문입니다.

나는 무엇을 할 것인가?

MQL5는 12를 반환합니다. MS Visual Studio는 13을 반환합니다.

부작용으로 인해 결정되지 않았습니다. 이 경우 - 일반적으로 세 배입니다. 다른 최적화는 변수 값을 다르게 계산할 수 있습니다. 최적화를 위해.

 
Konstantin :

mql5에서 이것들은 동등한 연산이고, C++에서는 다릅니다. 아래에서 방금 c++ 테스트의 예를 제시했습니다))

장작은 어디에서 왔습니까? array[++i]=i와 array[i++]=i 의 결과 를 비교하셨습니까?

까다로운 질문입니다. 후위 연산과 접두사 연산의 차이점은 무엇입니까?

 
. ... Rick D. ... . :

유명한 인터뷰 질문입니다.

인터뷰 대상자가 UB가 무엇인지 알고 있는지 여부만 드러내는 어리석고 불필요한 질문입니다. 그리고 토론 주제와 거의 관련이 없습니다.

알렉세이 로디오노프 :
나는 앉아서 접두사 양식 코드가 어떻게 유용할 수 있다고 생각합니다.

일반적으로 접두어 형식이 더 빠릅니다. 이제 귀찮게 할 필요가 없지만 컴파일러는 필요할 때 접미사 형식을 최적화할 수 있는 충분한 두뇌를 가지고 있습니다.

 
Slava :

장작은 어디에서 왔습니까? array[++i]=i 와 array[i++]=i 의 결과 를 비교하셨습니까?

까다로운 질문입니다. 후위 연산과 접두사 연산의 차이점은 무엇입니까?

array[++i]=i 및 array[i++]=i 는 무엇과 관련이 있습니까? 대화에 없는 것을 어떻게 비교할 수 있습니까?

발생한 분쟁의 일부로 mql에 변경 사항이 있고 이에 대해 알고 있는 경우 중재자로서 이를 대화 참가자에게 가져와 구문 지식을 테스트하려고 시도하지 않아야 합니다. 당신의 책임 ...

그러나 여기 모든 사람에게 mql 도움말의 지침에 접미사와 접두사 연산의 차이점을 보여주지만 지난 몇 년 동안의 테스트에 따르면 mql에서는 이러한 연산이 이전에는 동일했습니다.

추신. 그건 그렇고, 방금 대화 상자에서 예제를 확인했습니다.

 int i = 5 ;
i = i++ + ++i;

빌드 1816 결과 == 12

 
TheXpert :

인터뷰 대상자가 UB가 무엇인지 알고 있는지 여부만 드러내는 어리석고 불필요한 질문입니다. 그리고 토론 주제와 거의 관련이 없습니다.

일반적으로 접두어 형식이 더 빠릅니다. 이제 귀찮게 할 필요가 없지만 컴파일러는 필요할 때 접미사 형식을 최적화할 수 있는 충분한 두뇌를 가지고 있습니다.

또한, 제 생각에는 코드에서 그러한 구성을 사용하는 것은 단순히 받아 들일 수 없습니다.

첫째, 다른 구현에 대한 작업의 모호성 때문에, 그리고 훨씬 더 - 그러한 코드에서 실수를 하기 쉽고 알아내기가 쉽지 않기 때문입니다.

코드는 한 눈에 투명하고 이해할 수 있어야 합니다.

 
Georgiy Merts :

또한, 제 생각에는 코드에서 그러한 구성을 사용하는 것은 단순히 받아 들일 수 없습니다.

첫째, 다른 구현에 대한 작업의 모호성 때문에, 그리고 훨씬 더 - 그러한 코드에서 실수를 하기 쉽고 알아내기가 쉽지 않기 때문입니다.

코드는 한 눈에 투명하고 이해할 수 있어야 합니다.

mql5 도움말을 계약 및 언어 규칙의 형태로 변경할 때입니다.

[삭제]  
RETAIL_HEDGING 계정 유형 인 포지션의 부분 청산에 대한 질문을 알려주세요. 예를 들어, 나는 전문가로부터 포지션의 절반을 청산하고, 더 작은 로트를 가진 새로운 주문은 자동으로 개설되어야 합니다. 그렇다면 터미널에 새로운 주문이 보장되는 시점은 어디일까요? PositionClosePartial 직후에 나타날 필요는 없고 OnTrade 어딘가에서 포착해야 한다는 것을 올바르게 이해하고 있습니까?
 
Konstantin :

array[++i]=i 및 array[i++]=i 는 무엇과 관련이 있습니까? 대화에 없는 것을 어떻게 비교할 수 있습니까?

발생한 분쟁의 일부로 mql에 변경 사항이 있고 이에 대해 알고 있는 경우 중재자로서 이를 대화 참가자에게 가져와 구문 지식을 테스트하려고 시도하지 않아야 합니다. 당신의 책임 ...

그러나 여기 모든 사람에게 mql 도움말의 지침에 접미사와 접두사 연산의 차이점을 보여주지만 지난 몇 년 동안의 테스트에 따르면 mql에서는 이러한 연산이 이전에는 동일했습니다.

추신. 그건 그렇고, 방금 대화 상자에서 예제를 확인했습니다.

빌드 1816 결과 == 12

그리고 당신의 이러한 예가 순전히 이론적이라는 사실에도 불구하고. 순수하게 학생들을 위해. 제정신이 아닌 프로그래머는 이것을 프로덕션으로 출시하지 않을 것입니다.

접미사 및 접두사 증가 및 감소는 실제로 주로 루프에서 사용됩니다. 증가 및 감소라고 합니다!

다음은 예입니다.

 int i= 0 ;
while (i< ArraySize (array))
   array[i++]=i;

그리고

 int i= 0 ;
while (i< ArraySize (array))
   array[++i]=i;

접두사와 후위 연산이 같은 방식으로 작동한다고 주장하면 깃발은 손에 있고 북은 목에 있습니다.

접두사 증가의 경우 마지막 반복에서 초기화되지 않은 null 배열 요소와 배열 범위를 벗어남 오류가 발생합니다.


추신. 녹색 링크 https://www.mql5.com/en/docs/basis/operations/mathoperation 에서 이 문제에 대한 문서를 다시 읽기로 결정했습니다.

중요 사항

정수 i=5;
정수 k = i++ + ++i;

한 프로그래밍 환경에서 다른 프로그래밍 환경으로 위의 표현식을 전송할 때 계산 문제가 발생할 수 있습니다(예: Borland C++에서 MQL5로). 일반적으로 평가 순서는 컴파일러의 구현에 따라 다릅니다. 실제로 사후 감소(사후 증가)를 구현하는 두 가지 방법이 있습니다.

  1. 사후 감소(사후 증가)는 전체 표현식이 평가된 후 변수에 적용됩니다.
  2. 사후 감소(사후 증가)는 연산 위치에서 즉시 변수에 적용됩니다.

MQL5는 현재 사후 감소(사후 증가)를 계산하는 첫 번째 방법을 구현합니다. 그러나이 지식이 있더라도이 미묘함을 사용하여 실험하지 않는 것이 좋습니다.

Документация по MQL5: Основы языка / Операции и выражения / Арифметические операции
Документация по MQL5: Основы языка / Операции и выражения / Арифметические операции
  • www.mql5.com
Операция инкремента и декремента применяются только к переменным, к константам не применяются. Префиксныe инкремент (++i) и декремент (--k) применяются к переменной непосредственно перед использованием этой переменной в выражении. Могут возникнуть вычислительные проблемы при переносе вышеуказанного выражения из одной среды программирования в...