오늘까지 나는 C++ 연산자와 precedence을 이해했다고 생각했습니다.부울을 가진 C++ 접미사 연산자 우선 순위 AND
int i = 0, j = 0
i++;
j++;
cout << i << ' ' << j << endl;
은 물론, 우리가 i
및 j
의 출력 값은 1과 1, 각각 것으로 예상 : 나는 당신에게 다음과 같은 간단한 코드를 제공합니다. 이제 증분을 한 줄에 입력하면 어떻게됩니까?
int i = 0, j = 0
i++ && j++;
cout << i << ' ' << j << endl;
부울 연산자는 결과에 아무런 영향을 미치지 않습니다. 그러나 우리의 결과는 놀랍게도 i = 1
과 j = 0
입니까? 그럼 여기서 뭐하는거야?
나에게 이상한 점은 후위 증가에서 접두사 증가로 전환하거나 다른 부울 연산자를 사용하면 결과가 예상대로입니다. 예 :
//Expected i=1, j=1
++i && ++j;
//Expected i=1, j=1
i++ || j++;
P. 나는 한 줄은 다음과 같습니다에 올바른 사용 사례는 두 변수를 업데이트 할 것을 알고 :
i++, j++;
그러나 호기심이 날 최고의있어하고 부울 AND
연산자를 사용하여 왜 지금 내가 궁금하네요 것은 놀랍지 결과가 있습니다.
로 평가되는 경우가이 식의 우변을 평가 안 번째 코드의 출력이 아닌 - 다른 요인은
&&
오퍼레이터가 "단락"이 정의되어있다 당신이 주장하는 것 : https://ideone.com/61YZL6 –그는 && 표현식의 왼쪽이 0으로 평가 될 것으로 기대하고 있다고 생각합니다. 그렇기 때문에 오른쪽을 점검 할 필요가 없습니다. –
"올바른 두 변수를 모두 업데이트하려면 "is ++; j ++; 그리고 당신은 그것들을 한 줄에 넣는 것으로부터 아무것도 얻지 못합니다. –