Union 의 경우 첫 번째 멤버만 초기화 하고 필드를 바꾸면 테스트가 통과합니다. 대부분의 사용자가 기대하는 대로 동작하도록 속도를 희생하면서 동작을 변경할 가치가 있는지 생각해 봅시다.
변경된 사항을 고려하십시오. 이제 첫 번째 구성원이 0 x[i].i == 0과 같은지 확인합니다(이전 조건은 x[i].x == 0.0).
union X {
int i ;
double x;
};
voidOnStart ()
{
X x[ 10000 ] = {}; //(*)bool b = true ;
for ( int i = 0 ; i < ArraySize (x) && (b = ( x[i].i == 0 )); i++ );
Print ( b );
}
추신: 다음 형식의 매크로도 보았습니다.
이해하지 못했습니다.
이해하지 못했습니다.
그런 매크로, 구글 "macro while 0"의 편리성에 대해 인터넷에 많은 정보가 있습니다.
https://russianblogs.com/article/9410298326/
이 스레드에는 이미 오래전에 while(0)의 예가 있었습니다.
https://www.mql5.com/ru/forum/170952/page141#comment_12897922
만일의 경우를 대비하여 명확히 하겠습니다. 이것은 정적에만 해당됩니다(모두 C ++에 관한 것입니다). 지역 변수의 경우 사용자 정의 토러스가 있으면 nulling이 없습니다.
어떤 식으로든 OOP와 모순되지 않는 설명 자체가 마음에 들었습니다.
단순 구조 객체를 생성하면 다음이 발생합니다.
{}를 통한 선언이 있는 경우 단락 1-2 사이에 또 다른 선언이 삽입되어 할당된 메모리를 0으로 채웁니다.
이 논리로 OOP는 어떤 식으로든 고통을 겪지 않습니다. 유효한 메커니즘.
{}를 통한 선언이 있는 경우 단락 1-2 사이에 또 다른 선언이 삽입되어 할당된 메모리를 0으로 채웁니다.
이 논리로 OOP는 어떤 식으로든 고통을 겪지 않습니다. 유효한 메커니즘.
논리 자체는 여기서 문제가 됩니다. 생성자가 어쨌든 0으로 재설정된다면 왜 0으로 재설정합니까?
논리 자체는 여기서 문제가 됩니다. 생성자가 어쨌든 0으로 재설정된다면 왜 0으로 재설정합니까?
생성자가 있는 구조체는 공용체에서 사용할 수 없기 때문입니다.
Union 의 경우 첫 번째 멤버만 초기화 하고 필드를 바꾸면 테스트가 통과합니다.
대부분의 사용자가 기대하는 대로 동작하도록 속도를 희생하면서 동작을 변경할 가치가 있는지 생각해 봅시다.
변경된 사항을 고려하십시오. 이제 첫 번째 구성원이 0 x[i].i == 0과 같은지 확인합니다(이전 조건은 x[i].x == 0.0).
결과: 거짓
그리고 ZeroMemory와 함께 - 사실
그런 매크로, 구글 "macro while 0"의 편리성에 대해 인터넷에 많은 정보가 있습니다.
https://russianblogs.com/article/9410298326/
모든 소란은 매크로 끝에 세미콜론을 넣는 것입니다. 매크로 곳곳에 중괄호를 사용하는데 문제가 있는지 모르겠습니다.
변경된 사항을 고려하십시오. 이제 첫 번째 구성원이 0 x[i].i == 0과 같은지 확인합니다(이전 조건은 x[i].x == 0.0).
결과: 거짓
그리고 ZeroMemory와 함께 - 사실
네. mql 버그
(그리고 C++에서는 true를 반환합니다).