2013-07-19 2 views
0

이 질문은 제가 실제로 답을 모르는 것을 발견했습니다. 다음 코드가 있다고 가정하십시오.C++ 조건 연산자가 왼쪽에있는 경우 연관성

int grade = 100; 
string finalgrade = (grade > 90) ? "High Pass" 
           : (grade > 75) ? "Pass" 
               : (grade >= 60) ? "low pass" : "fail"; 

왼쪽 조건 일 때 조건 연산자는 어떻게 평가됩니까? 귀하의 예제에서

+8

기본적으로 PHP를 사용하게됩니다. 하하, 나는 농담을하고 싶다. http://phpsadness.com/sad/30을 참조하십시오. –

+0

언어 규칙이 변경되면 어떻게 될지 묻는 것은 의미가 없습니다. 그것을 바꾼 사람들은 새로운 법에서 일어나는 일을 쓰고, 우리는 그것을 읽고, 배우고 그것을 적용 할 것입니다. 일단 우리가 계속하는 일은 당신이 게시 한 것과 같은 복잡한 표현을 피하는 것입니다. –

+2

@DanielDaranas 무슨 일이 일어날 지 물어 보는 것이 좋습니다. PHP 언어 작성자가 그 영향이 무엇인지 생각해 보았다고 상상해보십시오. – jamesdlin

답변

2

, 그 그런 의미 :

a ? b : c ? d : e 

(a ? b : c) ? d : e 

대신 :

a ? b : (c ? d : e) 

귀하의 예제이 적용, 당신은 얻을 것이다 :

string finalgrade = ( ( (grade > 90) 
          ? "High Pass" 
          : (grade > 75)) 
         ? "Pass" 
         : (grade >= 60)) 
        ? "low pass" 
        : "fail"; 

어느 --- 컴파일러가 grade = 100에 대한 --- 일치하지 않는 유형에 대해 불평하지 않았다고 가정

string finalgrade = ( ( true 
          ? "High Pass" 
          : (grade > 75)) 
         ? "Pass" 
         : (grade >= 60)) 
        ? "low pass" 
        : "fail"; 

string finalgrade = ( "High Pass" 
         ? "Pass" 
         : (grade >= 60)) 
        ? "low pass" 
        : "fail"; 

string finalgrade = "Pass" 
        ? "low pass" 
        : "fail"; 

string finalgrade = "low pass"; 
+0

컴파일러가':'의 양쪽에 타입을 통합하려고하기 때문에 그 결과가 더 재미있을 것이다. 한쪽에는 'bool'이 있고 다른 한쪽에는 'char const *'가 있습니다. 'char const *'는'bool'으로 변환 될 수 있지만 inverse는 변환 할 수 없으므로'bool' (컴파일되지 않음)로'finalgrade'를 초기화하려고합니다. –

+0

그리고 매우 명확합니다 :'grade> 90'은'1'로 평가되지 않고'true'로 평가됩니다. –

+0

@ JamesKanze 컴파일러가 불일치 유형에 대해 불평하지 않는다고 가정하고 있음을 알았습니다 (어쨌든 가설적인 운동 임). 그러나이 훈련에서 가능한 두 가지 결과는''저역 ''과''실패 ''가 될 것이므로''bool'' 값으로'finalgrade'를 초기화하는 방법을 알지 못합니다. – jamesdlin

0

: ?:는 연관이 남아있는 경우 finalgrade = "하이 패스"

계산이 오른쪽에서 왼쪽으로 완료는

+0

"조건 연산자를 평가할 때 _ 왼쪽 ** 연관성 _입니까?" –

+0

맞아, 미안, 내가 잘못 읽었다. 내 대답은 쓸모가 없다. (그러나 정확하다.) –