2014-11-16 2 views
1

고려 : 나는 그것 하나 때문에 연산자 우선 순위 또는 논리적 단락의 상상논리 작업

56 
0 

,하지만 난 수없는 것 :

int i = 56, j = 0; 
    int n = i&&j; 
    cout << i&&j; 
    cout << endl << n; 

가 출력 될 것이다 어떤 이유인지 알아 내기 위해

+1

연산자 우선 순위 인 경우'cout << (i && j)'는 예상 결과를 제공해야합니다. – wvdz

+0

"출력은"?? –

답변

5

표현식 cout << i&&j(cout << i) && j과 같습니다. 두 피연산자는 모두 계산되어 bool으로 변환됩니다. 전체적으로 진술은 아무런 영향을 미치지 않지만, 부분 표현 인 cout << i의 평가는 보통 부작용을 가지고 있습니다. 즉, 표준 출력에 무언가를 쓰는 것입니다.

cout << itrue으로 평가되는 경우 && 연산자는 실제로 단락되었으며 j 만 평가됩니다. 이 조건은 일반적으로 cout.good()과 같습니다 (사용자가 표준 출력을 어떻게 든 닫을 수 없다면).

+0

이제는 (cout << i)는 참조를 리턴하므로 표현식은 1 && 0이 될 것이므로 0으로 평가할 것입니다. 그러나 cout은 이미 발생 했으므로 논리 표현식이 실행 되더라도 보이지 않습니다 출력을 콘솔에 표시합니다. 이것이 올바른 이해라면, 설명해 주셔서 대단히 감사합니다! – Imp

1

예상대로 << 연산자가 &&보다 우선합니다.

따라서, cout << i&&j은 먼저 i를 출력하고 반환 된 스트림을 j와 비교합니다 (둘 다 true이므로 반환 값은 true이지만이 값은 무시됩니다).

연산자 우선 순위의 전체 목록은 here을 참조하십시오.

+0

아,이 대답을 보지 못했지만 확인해 주셔서 감사합니다! – Imp