2011-04-12 3 views
2

아래 줄은 for 루프 안에 있습니다. 메서드가 실패하면 중단해야합니다. CATEGORY_1은 (는) 열거 형입니다. 이 열거 형을 AddToList 메서드의 새 매개 변수로 기본 값으로 추가했습니다. 아래에서 자세히 보면, 실제로 함수의 매개 변수 목록 외부에 쉼표와 열거 형을 넣는 실수를 한 것입니다. VS2010으로 완벽하게 컴파일됩니다. 따라서 CATEGORY_1 대신 해당 매개 변수에 기본값이 전달되었다는 사실을 발견하기가 어려웠습니다. 누구나 이것이 성공하는 이유를 알고 있습니까?이 코드가 VS에서 컴파일되는 이유는 무엇입니까? ("extra"쉼표)

if (! AddToList(obj1, (unsigned int) Val), CATEGORY_1) 
{ 
    break; 
} 

답변

7

쉼표는 단지 ​​구분 기호가 아닙니다. 운영자가 될 수도 있습니다. 그 쉼표는 연산자입니다. 쉼표 연산자는 첫 번째 표현식을 평가하고 결과를 무시한 다음 두 번째 표현식을 평가하고 그 결과를 산출합니다.

!AddToList(obj1, (unsigned int) Val) , CATEGORY_1 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^ 
First expression      Second expression 

는 [물론, 다른 대부분의 운영자 등 콤마 연산자는 오버로드 될 수 있고, 과부하가 여기에 사용되는 경우, 의미는 다를 수있다. 이것은 쉼표 연산자의 동작입니다.]

+0

연산자가 적용되지 않습니까? –

+0

명확하게 말하면 James가 참조하는 첫 번째 표현식은'! AddToList (obj1, (unsigned int) Val)'이고 두 번째 표현식은'CATEGORY_1'입니다. –

+0

@Sriram Subramanian : 아니요, 콤마 연산자는 운영자. 따라서, not는'AddToList'에 적용되고,'CATEGORY_1'에는 적용되지 않을 것입니다. – ildjarn

1

쉼표 연산자는 첫 번째 표현식의 결과를 무시하고 두 번째 표현식의 값을 평가합니다. 따라서이 경우 bool(CATEGORY_1) == true이면 if은 평가되지 않습니다. 반대로 bool(CATEGORY_1) == false 인 경우 if은 항상 평가됩니다. 어떤 경우에도 AddToList이 반환 한 내용이 중요하지 않습니다.

관련 문제