2017-02-01 11 views
-3
int a = 1, b = 2; 
int c = a*b + b==0; // c = 0 
cout << a*b + b==0; // outputs 4 

c의 C++ 연산자 우선 순위 0 평가.출력 스트림

cout 명령문 출력에 같은 표현식을 사용하는 이유는 무엇입니까?

+0

<<가 우선 순위가 있기 때문에 ==보다 * 높은 *. –

+0

좋은 책이나 문서에 대한 C + + 우선 순위 연산자 목록을 포함 ... –

답변

4

이러한 연산자의 precedence이>operator+>operator<<>operator==operator*을하기 때문에. cout << a*b + b==0;(cout << ((a*b) + b)) == 0;과 같습니다.

이어서 ((a*b) + b))의 결과, 즉 4cout0와 비교하고, (cout << ((a*b) + b))의 리턴 값을 출력 할 것이다. C++ 11보다 전에 coutoperator void* 통해 암시 적으로 변환 될 수 있습니다, 어떤 오류가있을 때 null 포인터를 반환합니다. 따라서 여기서는 0 (즉 null 포인터)과 비교되며 더 이상 결과가 없습니다.

-2

answr by @songyuanyao은 이미 코드의 동작을 설명합니다.

따라하기 쉬운 코드를 작성하는 것이 훨씬 더 효과적이라고 말함으로써 OP에 응답하고 싶습니다.

식의 논리를 명확하게 볼 수없는 경우이를 단순화하십시오. 괄호를 사용하면 쉽게 이해할 수 있습니다. 난독 화 코드 경연 대회에 대한 코드를 작성하지 않는 한 그러한 코드를 작성할 이유가 없습니다.

는 당신의 의도에 따라

int c = ((a*b + b) == 0); 

int c = (a*b) + (b==0); 

하거나 그 라인

int c = a*b + b==0; // c = 0 

변환.