2013-07-25 6 views
-7
int a=1,b=2,c=3; 
int x=1; 
int y=10; 
a = x ? b : c; 
cout<< a;  // Outputs 2 (the value of b) 
a = y ? b : c; 
cout<< a;  // Outputs 2 (the value of b) 

자, 다음을보십시오.C 조건 연산자의 결과 혼동

a=0; 
x=0; 
a = x ? b : c; 
cout<< a; // Outputs 3 (the value of c !!!!) 

왜이 비정상적인 동작 ?? a와 x가 모두 0 일 때만 표현식이 거짓으로 평가되고, 그렇지 않으면 항상 이됩니다. 설명 해주십시오.

+3

어 ... 행동은 사실 아주 평범합니다. 그리고 만약''a '가'c'의 값을 얻는다면''a''와''x''가 모두'0'이되어야한다는 결론이 나오면 실험 결과를 올바르게 읽지 않을 것입니다. –

+0

예. 이제 이해가된다. 나는 틀린 결론을 내렸다. 감사! – user1122

답변

6

xcondition ? a : b 수익률을 기록하는 경우 삼항 연산자, condition 그렇지 않으면 true이고 ba 경우 0

불러 오기 때문입니다. 숫자와 함께 사용하고 0을 제외한 숫자는 true을 부울로 간주합니다. 귀하의 경우

x ? b : c0 ? 2 : 3이며, 0false을하기 때문에, 그것은 3 다음 a 변수 및 인쇄에 할당 가도록 3. 평가 - 아무것도 이상한 일이 일어나고.

4

아주 잘 보입니다. 표현 a = x ? b : c

에 해당
if (x) 
    a = b; 
else 
    a = c; 
당신이 X 이전 식을 실행하기에 0을 할당 그래서 만약

x는 어떤 아닌 값 true로 평가합니다 는, C의 값이 할당하고 할당하면됩니다 1부터 x까지 표현식을 실행하기 전에 b의 값이 a에 할당됩니다. a의 이전 값은 중요하지 않습니다.

+0

'x'에 '0'을 지정하면 'b'가 'a'에 어떻게 할당됩니까? – haccks

+0

영업 시간 내 나쁜 .... – user1122

+0

@ hhacks, 나는 문언을 더 명확하게하기 위해 대답을 업데이 트했습니다. 물론 x에 값을 할당하면 아무 일도 일어나지 않습니다. 내 말은 x가 문장이 실행될 때 값 0을 가졌다면 a는 b의 값을 얻을 것이고, 그렇지 않으면 a는 c의 값을 얻는다는 것입니다. –

0

그 이유는 C 및 C++에서 인 경우 값이 "true"로 평가되기 때문입니다.

0

'a'값은 'x'및 'y'값에만 의존합니다. 처음에는 'x'와 'y'가 모두 0보다 크므로 조건은 true로 평가되고 'a'에 'b'의 값을 얻습니다. 두 번째 경우 'x'는 'a'가 'c'값을 갖도록 false로 평가하는 0입니다. 당신이 = C를 얻을 것이다 X = 0을 설정하면

0
a = x ? b : c; 

따라서

if(x != 0) { 
    a = b; 
} else { 
    a = c; 
} 

과 동일합니다.