int a = 1, b = 2;
int c = a*b + b==0; // c = 0
cout << a*b + b==0; // outputs 4
c
의 C++ 연산자 우선 순위 0
평가.출력 스트림
cout
명령문 출력에 같은 표현식을 사용하는 이유는 무엇입니까?
int a = 1, b = 2;
int c = a*b + b==0; // c = 0
cout << a*b + b==0; // outputs 4
c
의 C++ 연산자 우선 순위 0
평가.출력 스트림
cout
명령문 출력에 같은 표현식을 사용하는 이유는 무엇입니까?
이러한 연산자의 precedence이>operator+
>operator<<
>operator==
operator*
을하기 때문에. cout << a*b + b==0;
은 (cout << ((a*b) + b)) == 0;
과 같습니다.
이어서 ((a*b) + b))
의 결과, 즉 4
즉 cout
는 0
와 비교하고, (cout << ((a*b) + b))
의 리턴 값을 출력 할 것이다. C++ 11보다 전에 cout
operator void* 통해 암시 적으로 변환 될 수 있습니다, 어떤 오류가있을 때 null 포인터를 반환합니다. 따라서 여기서는 0
(즉 null 포인터)과 비교되며 더 이상 결과가 없습니다.
answr by @songyuanyao은 이미 코드의 동작을 설명합니다.
따라하기 쉬운 코드를 작성하는 것이 훨씬 더 효과적이라고 말함으로써 OP에 응답하고 싶습니다.
식의 논리를 명확하게 볼 수없는 경우이를 단순화하십시오. 괄호를 사용하면 쉽게 이해할 수 있습니다. 난독 화 코드 경연 대회에 대한 코드를 작성하지 않는 한 그러한 코드를 작성할 이유가 없습니다.
는 당신의 의도에 따라int c = ((a*b + b) == 0);
에
int c = (a*b) + (b==0);
하거나 그 라인
int c = a*b + b==0; // c = 0
변환.
<<가 우선 순위가 있기 때문에 ==보다 * 높은 *. –
좋은 책이나 문서에 대한 C + + 우선 순위 연산자 목록을 포함 ... –