읽고 나면 숨겨진 기능 및 C ++ / STL의 어두운 구석을 에 comp.lang.c++.moderated
, 나는 완전히 다음은 컴파일 및 Visual Studio 2008 및 G ++ 4.4 모두에서 일 니펫 것을 놀랐습니다.
코드는 다음과 같습니다.
#include <stdio.h>
int main()
{
int x = 10;
while (x --> 0) // x goes to 0
{
printf("%d ", x);
}
}
산출:
9 8 7 6 5 4 3 2 1 0
GCC에서도 작동하기 때문에 이것이 C라고 가정합니다. 이것은 표준에서 어디에 정의되어 있으며 어디에서 왔습니까?
답변
-->
연산자가 아닙니다. 그것은 사실 두 개의 분리 된 사업자에, --
하고 >
.
조건부 코드가 감소 하고 원래 값 (감소하지 않음) x
을 반환 x
한 다음 원래 값을 연산자 를 0
사용하여 비교합니다 >
.
이해를 돕기 위해 다음과 같이 진술을 작성할 수 있습니다.
while( (x--) > 0 )
답변
또는 완전히 다른 무언가를 x
원한다면 …로 슬라이드합니다 0
.
while (x --\
\
\
\
> 0)
printf("%d ", x);
수학적으로는 아니지만 모든 그림은 천 단어를 그립니다.
답변
이는 매우 복잡한 연산자이므로 ISO / IEC JTC1 (Joint Technical Committee 1) 조차도 C ++ 표준의 두 부분에 설명을 추가했습니다.
옆으로 농담, 그들은 두 개의 서로 다른 사업자 있습니다 --
및 >
§5.2.6 / 2와 C ++ 03 표준의 §5.9에서 각각 설명했다.
답변
그것은 동등하다
while (x-- > 0)
x--
(포스트 감소)는 다음과 같습니다 x = x-1
. 코드 는 다음과 같이 변환됩니다.
while(x > 0) {
x = x-1;
// logic
}
x--; // The post decrement done when x <= 0
답변
x
반대 방향으로 더 빨리 0으로 갈 수 있습니다.
int x = 10;
while( 0 <---- x )
{
printf("%d ", x);
}
8 6 4 2
화살표로 속도를 조절할 수 있습니다!
int x = 100;
while( 0 <-------------------- x )
{
printf("%d ", x);
}
90 80 70 60 50 40 30 20 10
😉
답변
이것의
#include <stdio.h>
int main(void){
int x = 10;
while( x-- > 0 ){ // x goes to 0
printf("%d ", x);
}
return 0;
}
단지 공간 --
만으로도 재미 있고 감소하고 >
비교할 수 있습니다.
답변
사용법 -->
은 역사적으로 관련이 있습니다. 감소는 x86 아키텍처에서 증가하는 것보다 더 빠르며 (어떤 경우에도 여전히) 빠릅니다. 사용은 -->
그 제안 x
에가는 0
수학적 배경을 가진 사람들에게, 그리고 호소.