고려 : 나는 그것 하나 때문에 연산자 우선 순위 또는 논리적 단락의 상상논리 작업
56
0
,하지만 난 수없는 것 :
int i = 56, j = 0;
int n = i&&j;
cout << i&&j;
cout << endl << n;
가 출력 될 것이다 어떤 이유인지 알아 내기 위해
고려 : 나는 그것 하나 때문에 연산자 우선 순위 또는 논리적 단락의 상상논리 작업
56
0
,하지만 난 수없는 것 :
int i = 56, j = 0;
int n = i&&j;
cout << i&&j;
cout << endl << n;
가 출력 될 것이다 어떤 이유인지 알아 내기 위해
표현식 cout << i&&j
은 (cout << i) && j
과 같습니다. 두 피연산자는 모두 계산되어 bool
으로 변환됩니다. 전체적으로 진술은 아무런 영향을 미치지 않지만, 부분 표현 인 cout << i
의 평가는 보통 부작용을 가지고 있습니다. 즉, 표준 출력에 무언가를 쓰는 것입니다.
cout << i
이 true
으로 평가되는 경우 &&
연산자는 실제로 단락되었으며 j
만 평가됩니다. 이 조건은 일반적으로 cout.good()
과 같습니다 (사용자가 표준 출력을 어떻게 든 닫을 수 없다면).
이제는 (cout << i)는 참조를 리턴하므로 표현식은 1 && 0이 될 것이므로 0으로 평가할 것입니다. 그러나 cout은 이미 발생 했으므로 논리 표현식이 실행 되더라도 보이지 않습니다 출력을 콘솔에 표시합니다. 이것이 올바른 이해라면, 설명해 주셔서 대단히 감사합니다! – Imp
연산자 우선 순위 인 경우'cout << (i && j)'는 예상 결과를 제공해야합니다. – wvdz
"출력은"?? –